c++中插座网络编程实例详解

  

<强> 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);   }      

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

c++中插座网络编程实例详解