<强> c++中插座网络编程实例详解强>
现在几乎所有C/c++的后台程序都需要进行网络通讯,其实现方法无非有两种:使用系统底层插座或者使用已有的封装好的网络库。本文对两种方式进行总结,并介绍一个轻量级的网络通讯库ZeroMQ。
<强> 1。基本的Scoket编程强>
关于基本的scoket编程网络上已有很多资料,作者在这里引用一篇文章中的内容进行简要说明。
基于套接字编程,基本上就是以下6个步骤:
1,套接字()函数
2、绑定()函数
3、听(),()连接函数
4,accept()函数
5、读(),写()函数等
6,close()函数
下面直接引用文章里的代码说明。
//服务器端 # include# include # include # include # include # include # include #定义MAXLINE 4096 int主要(int命令行参数个数,char * * argv) { int listenfd connfd; 结构指向sockaddr_in servaddr; char迷[4096]; int n; 如果((listenfd=插座(AF_INET SOCK_STREAM 0))==1) { printf("创建套接字错误:% s (errno: % d) \ n”, strerror (errno), errno); 退出(0); } memset(和servaddr 0 sizeof (servaddr)); servaddr。sin_family=AF_INET; servaddr.sin_addr。s_addr=htonl (INADDR_ANY); servaddr。sin_port=htons (6666); 如果绑定(listenfd (struct sockaddr *), servaddr, sizeof (servaddr))==1) { printf("绑定套接字错误:% s (errno: % d) \ n”, strerror (errno), errno); 退出(0); } 如果听(listenfd 10)==1) { printf("监听套接字错误:% s (errno: % d) \ n”, strerror (errno), errno); 退出(0); } printf("======等待客户请求======\ n”); 而(1){ 如果((connfd=接受(listenfd (struct sockaddr *)空,空))==1){ printf(“接受套接字错误:% s (errno: % d)”, strerror (errno), errno); 继续; } n=recv (connfd,迷MAXLINE 0); 迷[n]=' \ 0 '; 从客户机printf (" recv味精:% s \ n”,迷); 关闭(connfd); } 关闭(listenfd); }
客户端 # include# include # include # include # include # include # include #定义MAXLINE 4096 int主要(int命令行参数个数,char * * argv) { int sockfd n; sendline char recvline [4096], [4096]; 结构指向sockaddr_in servaddr; 如果(命令行参数个数!=2){ printf("用法:。/客户& lt; ipaddress> \ n”); 退出(0); } 如果((sockfd=插座(AF_INET SOCK_STREAM 0)) & lt;0){ printf("创建套接字错误:% s (errno: % d) \ n”, strerror (errno), errno); 退出(0); } memset(和servaddr 0 sizeof (servaddr)); servaddr。sin_family=AF_INET; servaddr。sin_port=htons (6666); 如果(inet_pton (AF_INET, argv [1], servaddr.sin_addr) & lt;=0) { printf (" inet_pton错误% s \ n”, argv [1]); 退出(0); } 如果(连接(sockfd (struct sockaddr *), servaddr, sizeof (servaddr)) & lt;0){ printf("连接错误:% s (errno: % d) \ n”, strerror (errno), errno); 退出(0); } printf("味精发送到服务器:\ n "); fgets(4096年sendline stdin); 如果(发送(sockfd、sendline strlen (sendline), 0) & lt;0) { printf (" msg发送错误:% s (errno: % d) \ n”, strerror (errno), errno); 退出(0); } 关闭(sockfd); 退出(0); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!