C++中Socket网络编程实例详解
C++中Socket网络编程实例详解
现在几乎所有C/C++的后台程序都需要进行网络通讯,其实现方法无非有两种:使用系统底层socket或者使用已有的封装好的网络库。本文对两种方式进行总结,并介绍一个轻量级的网络通讯库ZeroMQ。
1.基本的Scoket编程
关于基本的scoket编程网络上已有很多资料,作者在这里引用一篇文章中的内容进行简要说明。
基于socket编程,基本上就是以下6个步骤:
1、socket()函数
2、bind()函数
3、listen()、connect()函数
4、accept()函数
5、read()、write()函数等
6、close()函数
下面直接引用文章里的代码说明。
//服务器端 #include#include #include #include #include #include #include #defineMAXLINE4096 intmain(intargc,char**argv) { intlistenfd,connfd; structsockaddr_inservaddr; charbuff[4096]; intn; if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){ printf("createsocketerror:%s(errno:%d)\n",strerror(errno),errno); exit(0); } memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_addr.s_addr=htonl(INADDR_ANY); servaddr.sin_port=htons(6666); if(bind(listenfd,(structsockaddr*)&servaddr,sizeof(servaddr))==-1){ printf("bindsocketerror:%s(errno:%d)\n",strerror(errno),errno); exit(0); } if(listen(listenfd,10)==-1){ printf("listensocketerror:%s(errno:%d)\n",strerror(errno),errno); exit(0); } printf("======waitingforclient'srequest======\n"); while(1){ if((connfd=accept(listenfd,(structsockaddr*)NULL,NULL))==-1){ printf("acceptsocketerror:%s(errno:%d)",strerror(errno),errno); continue; } n=recv(connfd,buff,MAXLINE,0); buff[n]='\0'; printf("recvmsgfromclient:%s\n",buff); close(connfd); } close(listenfd); }
客户端 #include#include #include #include #include #include #include #defineMAXLINE4096 intmain(intargc,char**argv) { intsockfd,n; charrecvline[4096],sendline[4096]; structsockaddr_inservaddr; if(argc!=2){ printf("usage:./client \n"); exit(0); } if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){ printf("createsocketerror:%s(errno:%d)\n",strerror(errno),errno); exit(0); } memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_port=htons(6666); if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0){ printf("inet_ptonerrorfor%s\n",argv[1]); exit(0); } if(connect(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr))<0){ printf("connecterror:%s(errno:%d)\n",strerror(errno),errno); exit(0); } printf("sendmsgtoserver:\n"); fgets(sendline,4096,stdin); if(send(sockfd,sendline,strlen(sendline),0)<0) { printf("sendmsgerror:%s(errno:%d)\n",strerror(errno),errno); exit(0); } close(sockfd); exit(0); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!