国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中Socket網(wǎng)絡(luò)編程實例詳解

2020-01-26 14:11:29
字體:
供稿:網(wǎng)友

C++中Socket網(wǎng)絡(luò)編程實例詳解

現(xiàn)在幾乎所有C/C++的后臺程序都需要進行網(wǎng)絡(luò)通訊,其實現(xiàn)方法無非有兩種:使用系統(tǒng)底層socket或者使用已有的封裝好的網(wǎng)絡(luò)庫。本文對兩種方式進行總結(jié),并介紹一個輕量級的網(wǎng)絡(luò)通訊庫ZeroMQ。

 1.基本的Scoket編程

關(guān)于基本的scoket編程網(wǎng)絡(luò)上已有很多資料,作者在這里引用一篇文章中的內(nèi)容進行簡要說明。

基于socket編程,基本上就是以下6個步驟:

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

下面直接引用文章里的代碼說明。

//服務(wù)器端        #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] = '/0';      printf("recv msg from client: %s/n", 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 %s/n",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);    }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安宁市| 双辽市| 丹凤县| 防城港市| 南通市| 天水市| 宁晋县| 天全县| 林口县| 阜城县| 洪江市| 安塞县| 册亨县| 攀枝花市| 澄迈县| 古蔺县| 崇左市| 民县| 永年县| 保山市| 花莲县| 昌乐县| 美姑县| 象山县| 改则县| 辉县市| 安图县| 濮阳县| 澄江县| 临泉县| 滁州市| 青阳县| 黑山县| 陵川县| 桑植县| 大理市| 鲜城| 周宁县| 元谋县| 都江堰市| 芦山县|