C++中Socket网络编程实例详解
发布时间:2020-12-16 05:11:44 所属栏目:百科 来源:网络整理
导读:C++中Socket网络编程实例详解 现在几乎所有C/C++的后台程序都需要进行网络通讯,其实现方法无非有两种:使用系统底层socket或者使用已有的封装好的网络库。本文对两种方式进行总结,并介绍一个轻量级的网络通讯库ZeroMQ。 1.基本的Scoket编程 关于基本的scok
C++中Socket网络编程实例详解 现在几乎所有C/C++的后台程序都需要进行网络通讯,其实现方法无非有两种:使用系统底层socket或者使用已有的封装好的网络库。本文对两种方式进行总结,并介绍一个轻量级的网络通讯库ZeroMQ。 1.基本的Scoket编程 关于基本的scoket编程网络上已有很多资料,作者在这里引用一篇文章中的内容进行简要说明。 基于socket编程,基本上就是以下6个步骤: 1、socket()函数 下面直接引用文章里的代码说明。 //服务器端 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define MAXLINE 4096 int main(int argc,char** argv) { int listenfd,connfd; struct sockaddr_in servaddr; char buff[4096]; int n; if( (listenfd = socket(AF_INET,SOCK_STREAM,0)) == -1 ){ printf("create socket error: %s(errno: %d)n",strerror(errno),errno); exit(0); } memset(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(6666); if( bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)n",errno); exit(0); } if( listen(listenfd,10) == -1){ printf("listen socket error: %s(errno: %d)n",errno); exit(0); } printf("======waiting for client's request======n"); while(1){ if( (connfd = accept(listenfd,(struct sockaddr*)NULL,NULL)) == -1){ printf("accept socket error: %s(errno: %d)",errno); continue; } n = recv(connfd,buff,MAXLINE,0); buff[n] = ' '; printf("recv msg from client: %sn",buff); close(connfd); } close(listenfd); } 客户端 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define MAXLINE 4096 int main(int argc,char** argv) { int sockfd,n; char recvline[4096],sendline[4096]; struct sockaddr_in servaddr; if( argc != 2){ printf("usage: ./client <ipaddress>n"); exit(0); } if( (sockfd = socket(AF_INET,0)) < 0){ printf("create socket error: %s(errno: %d)n",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_pton error for %sn",argv[1]); exit(0); } if( connect(sockfd,sizeof(servaddr)) < 0){ printf("connect error: %s(errno: %d)n",errno); exit(0); } printf("send msg to server: n"); fgets(sendline,4096,stdin); if( send(sockfd,sendline,strlen(sendline),0) < 0) { printf("send msg error: %s(errno: %d)n",errno); exit(0); } close(sockfd); exit(0); } 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |