C++中Socket网络编程实例详解分享

—-想了解C++中Socket网络编程实例详解分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

C++中Socket网络编程实例详解

现在几乎所有C/C++的后台程序都需要进行网络通讯,其实现方法无非有两种:使用系统底层socket或者使用已有的封装好的网络库。C++中Socket网络编程实例详解分享对两种方式进行总结,并介绍一个轻量级的网络通讯库ZeroMQ。

 1.基本的Scoket编程

关于基本的scoket编程网络上已有很多资料,作者在这里引用一篇文章中的内容进行简要说明。

基于socket编程,基本上就是以下6个步骤:

1、socket()函数
2、bind()函数
3、listen()、connect()函数
4、accept()函数
5、read()、write()函数等
6、close()函数

下面直接引用文章里的代码说明。

  //服务器端            #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, 0, 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",strerror(errno),errno);        exit(0);        }              if( listen(listenfd, 10) == -1){        printf("listen socket error: %s(errno: %d)n",strerror(errno),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)",strerror(errno),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, SOCK_STREAM, 0)) < 0){        printf("create socket error: %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_pton error for %sn",argv[1]);        exit(0);        }              if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){        printf("connect error: %s(errno: %d)n",strerror(errno),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", strerror(errno), errno);        exit(0);        }              close(sockfd);        exit(0);      }

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

www.ctvol.com true https://www.ctvol.com/c-cdevelopment/488005.html Article C++中Socket网络编程实例详解分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/488005.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐