C/C++网络编程——linux实现

387 阅读1分钟

前言:网络编程就是编写程序使两台联网的计算机相互交换数据。

例子:服务器端开启一个socket,监听9999端口。客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello world";

服务器端:

![](https://upload-images.jianshu.io/upload_images/24762785-612458dce49877b4.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  step1:调用socket函数创建套接字。

  step2:调用bind函数分配ip和端口号。

  step3:调用listen函数转为可接受请求状态。

  step4:调用accept函数受理连接请求。

![](https://upload-images.jianshu.io/upload_images/24762785-e33163372566ae8e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1#include2#include3#include5#include6#include78usingnamespacestd;910intmain()11 {12intserv_sock = socket(PF_INET,

SOCK_STREAM,0);13if(serv_sock == -1) {14cout<<"socket() error"<< endl;15return0;16 }1718 sockaddr_in serv_addr;19serv_addr.sin_family = AF_INET;20serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");21serv_addr.sin_port =

htons(9999);2223if(bind(serv_sock, (sockaddr*) &serv_addr,sizeof(serv_addr)) == -1) {24cout<<"bind() error"<< endl;25 close(serv_sock);26return0;27 }2829if(listen(serv_sock,5) == -1) {30cout<<"listen() error"<< endl;31 close(serv_sock);32return0;33

}3435 sockaddr_in clnt_addr;36socklen_t clnt_add_size =sizeof(clnt_addr);37cout<<"start listen"<< endl;38intclnt_sock = accept(serv_sock, (sockaddr*) &clnt_addr, &clnt_add_size);39if(clnt_sock == -1) {40cout<<"accept() error"<< endl;41

close(clnt_sock);42 close(serv_sock);43return0;44 }4546stringmessage ="hello world";47 write(clnt_sock, message.c_str(), message.size());4849 close(clnt_sock);50 close(serv_sock);5152return0;53}

![](https://upload-images.jianshu.io/upload_images/24762785-84314f84ad286b62.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

客户端:

  step1:调用socket函数创建套接字。

  step2:调用connect函数想服务器端发送连接请求。

![](https://upload-images.jianshu.io/upload_images/24762785-8a5c606ee780bc43.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1#include2#include3#include5#include6#include78usingnamespacestd;910intmain()11 {12intclnt_sock = socket(PF_INET, SOCK_STREAM,0);13if(clnt_sock == -1) {14cout<<"socket() error"<< endl;15return0;16 }1718 sockaddr_in

serv_addr;19serv_addr.sin_family = AF_INET;20serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");21serv_addr.sin_port = htons(9999);2223if(connect(clnt_sock, (sockaddr*) &serv_addr,sizeof(serv_addr)) == -1) {24cout<<"connect() error"<< endl;25

close(clnt_sock);26return0;27 }2829charmessage[100];30intstr_len = read(clnt_sock, message,sizeof(message)-1);31if(str_len == -1) {32cout<<"read failed"<< endl;33 close(clnt_sock);34return0;35 }3637cout<< message << endl;38 close(clnt_sock);39return0;40}

  示例中用到了write和read函数,linux中一切都被看作文件,所以套接字也可以像操作文件一样去操作。

如果你想要更多的资料和素材请关注我的主页或者加入我的企鹅圈哦!!

![](https://upload-images.jianshu.io/upload_images/24762785-c9d240aa1fc388f7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)