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

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

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

2020-05-23 13:47:43
字體:
供稿:網(wǎng)友

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

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

 1.基本的Scoket編程

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

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

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台东市| 诏安县| 寿宁县| 四川省| 新晃| 新田县| 合水县| 额济纳旗| 濉溪县| 博兴县| 驻马店市| 禄劝| 乐山市| 桃园县| 富锦市| 正镶白旗| 都昌县| 姚安县| 通江县| 郸城县| 松原市| 全椒县| 曲沃县| 张家界市| 锡林浩特市| 高邮市| 佛山市| 呼图壁县| 淳安县| 峡江县| 合肥市| 襄汾县| 苏州市| 常宁市| 利川市| 磐安县| 镇原县| 泽库县| 黄浦区| 安国市| 旺苍县|