C/C++网络编程1——linux下实现
网络编程就是编写程序使两台联网的计算机相互交换数据。

例子:服务器端开启一个socket,监听9999端口。客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello world";
服务器端:
step1:调用socket函数创建套接字。
step2:调用bind函数分配ip和端口号。
step3:调用listen函数转为可接受请求状态。
step4:调用accept函数受理连接请求。
#include <unistd.h>
#include <iostream>
#include <string>
#include <cstdlib>
#include <arpa/inet.h>
#include <sys/socket.h> using namespace std; int main()
{
int serv_sock = socket(PF_INET, SOCK_STREAM, );
if (serv_sock == -) {
cout << "socket() error" << endl;
return ;
} sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(); if (bind(serv_sock, (sockaddr*) &serv_addr, sizeof(serv_addr)) == -) {
cout << "bind() error" << endl;
close(serv_sock);
return ;
} if (listen(serv_sock, ) == -) {
cout << "listen() error" << endl;
close(serv_sock);
return ;
} sockaddr_in clnt_addr;
socklen_t clnt_add_size = sizeof(clnt_addr);
cout << "start listen" << endl;
int clnt_sock = accept(serv_sock, (sockaddr*) &clnt_addr, &clnt_add_size);
if (clnt_sock == -) {
cout << "accept() error" << endl;
close(clnt_sock);
close(serv_sock);
return ;
} string message = "hello world";
write(clnt_sock, message.c_str(), message.size()); close(clnt_sock);
close(serv_sock); return ;
}
客户端:
step1:调用socket函数创建套接字。
step2:调用connect函数想服务器端发送连接请求。
#include <unistd.h>
#include <iostream>
#include <string>
#include <cstdlib>
#include <arpa/inet.h>
#include <sys/socket.h> using namespace std; int main()
{
int clnt_sock = socket(PF_INET, SOCK_STREAM, );
if (clnt_sock == -) {
cout << "socket() error" << endl;
return ;
} sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(); if (connect(clnt_sock, (sockaddr*) &serv_addr, sizeof(serv_addr)) == -) {
cout << "connect() error" << endl;
close(clnt_sock);
return ;
} char message[];
int str_len = read(clnt_sock, message, sizeof(message)-);
if (str_len == -) {
cout << "read failed" << endl;
close(clnt_sock);
return ;
} cout << message << endl;
close(clnt_sock);
return ;
}
示例中用到了write和read函数,linux中一切都被看作文件,所以套接字也可以像操作文件一样去操作。
C/C++网络编程1——linux下实现的更多相关文章
- (50)LINUX应用编程和网络编程之五 Linux信号(进程间通信)
信号实现进程间的通信 3.5.1.什么是信号 ...
- (49)LINUX应用编程和网络编程之四 Linux进程全解
补充: 1. C程序的执行过程: C编译器调用链接器,链接器设置可执行程序文件的启动起始地址(启动例程),启动例程获得内核传递来的 命令行参数和环境变量值,为调用main函数做准备.[实际上该启动例 ...
- (46)LINUX应用编程和网络编程之一Linux应用编程框架
3.1.1.应用编程框架介绍 3.1.1.1.什么是应用编程 (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机.C高级.uboot和系统移植.linux应用编程和网络编程.驱动. ...
- C语言网络编程(Linux && Windows)(1)
和朋友一起做课程设计,同时学习C语言的网络编程,以前写的都是python网络编程,但python很多的库都是封装好的,大部分人在使用的时候不会去了解底层的实现,这样对长远的学习不太好,也改正自己这方面 ...
- 监控io性能、free、ps命令、查看网络状态、Linux下抓包 使用介绍
第7周第2次课(5月8日) 课程内容: 10.6 监控io性能 10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://ww ...
- (52)LINUX应用编程和网络编程之七Linux线程
3.7.1.再论进程 3.7.1.1.多进程实现同时读取键盘和鼠标 3.7.1.2.使用进程技术的优势 (1)CPU时分复用,单核心CPU可以实现宏观上的并行.微观上的串行 (2)实现多任务系统需求( ...
- Python网络编程:Linux epoll
原文地址:http://scotdoyle.com/python-epoll-howto.html 介绍 Python已于2.6版本添加访问Linux epoll库的API.这篇教程使用Python ...
- Linux centos7日常运维——监控io性能、free内存命令、ps进程命令、查看网络状态、linux下抓包
一.监控io性能 Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. iostat ...
- (51)LINUX应用编程和网络编程之六Linux高级IO
3.6.1.非阻塞IO 3.6.1.1.阻塞与非阻塞 阻塞:阻塞具有很多优势(是linux系统的默认设置),单路IO的时候使用阻塞式IO没有降低CPU的性能 补充:阻塞/非阻塞, 它们是程序在等待消息 ...
随机推荐
- Groovy脚本-通用SQL开关
备注:使用Groovy语言进行编写,看不懂的同学请先了解Groovy脚本. Groovy学习地址:https://www.cnblogs.com/tiechui2015/p/10828457.html ...
- plupload上传视频插件jQuery+php
我在网上找到一个很好的视频上传插件,经过我的一些整理.补充,在这里分享给大家. 这个视频插件是新浪微博plupload上传视频插件,支持格式有mpg,m4v,mp4,flv,3gp,mov,avi,r ...
- nginx介绍以及nginx的反向代理
什么是nginx? Nginx 是一个高性能的轻量级的HTTP和反向代理服务器,也是一个邮件服务器. 下载地址 本人使用的是Tengine,它是由淘宝网发起的Web服务器项目.它在Nginx的基础上, ...
- Shiro入门学习之散列算法与凭证配置(六)
一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...
- jmeter beanshell 使用参数引用
1.直接使用beanshell 写代码引用: 2. beanshell 引用.java 文件 3.beanshell 引用jar 包
- JavaScript 深度遍历对象的两种方式,递归与非递归
递归遍历: 基本问题: 当前属性值不为对象时,打印键和值 递归过程:当前属性值为对象时,打印键,继续递归 var o = { a: { b: { c: { d: { e: { f: 1, g:{ h: ...
- Java语言特性、加载与执行
[开源.免费.纯面向对象.跨平台] 简单性: 相对而言,例如,Java是不支持多继承的,C++是支持多继承的,多继承比较复杂:C++ 有指针,Java屏蔽了指针的概念.所以相对来说Java是简单的. ...
- 02-12Android学习进度报告十二
今天学习了ListView的焦点问题,基本了解了ListView的使用内容. 首先可以为抢占了控件的组件设置:android:focusable="false" 只需为抢占了Lis ...
- bootstrap标记说明
<span class="caret"> 这就是 一个倒三角
- Binary Heap(二叉堆) - 堆排序
这篇的主题主要是Heapsort(堆排序),下一篇ADT数据结构随笔再谈谈 - 优先队列(堆). 首先,我们先来了解一点与堆相关的东西.堆可以实现优先队列(Priority Queue),看到队列,我 ...