欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年04月08日 16:24:40   投稿:lqh  
這篇文章主要介紹了C++中Socket網(wǎng)絡(luò)編程實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

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)行簡要說明。

基于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ì)本站的支持!

相關(guān)文章

  • C語言中循環(huán)嵌套的應(yīng)用方式

    C語言中循環(huán)嵌套的應(yīng)用方式

    這篇文章主要介紹了C語言中循環(huán)嵌套的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++?LeetCode542矩陣示例詳解

    C++?LeetCode542矩陣示例詳解

    這篇文章主要為大家介紹了C++?LeetCode542矩陣示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C++設(shè)計(jì)模式之橋接模式

    C++設(shè)計(jì)模式之橋接模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之橋接模式,本文講解了什么是橋接模式、為什么要使用橋接模式、什么時(shí)候使用橋接模式等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • C語言算法積累圖的遍歷鄰接表簡單路徑

    C語言算法積累圖的遍歷鄰接表簡單路徑

    這篇文章主要為大家介紹了C語言算法積累圖的遍歷鄰接表簡單路徑實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C++數(shù)據(jù)結(jié)構(gòu)分析多態(tài)的實(shí)現(xiàn)與原理及抽象類

    C++數(shù)據(jù)結(jié)構(gòu)分析多態(tài)的實(shí)現(xiàn)與原理及抽象類

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作
    2022-02-02
  • C++數(shù)位DP復(fù)雜度統(tǒng)計(jì)數(shù)字問題示例詳解

    C++數(shù)位DP復(fù)雜度統(tǒng)計(jì)數(shù)字問題示例詳解

    這篇文章主要為大家介紹了利用C++數(shù)位DP的復(fù)雜度來統(tǒng)計(jì)數(shù)字問題的示例實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升值加薪
    2021-11-11
  • 詳解C++編程中的單目運(yùn)算符重載與雙目運(yùn)算符重載

    詳解C++編程中的單目運(yùn)算符重載與雙目運(yùn)算符重載

    這篇文章主要介紹了詳解C++編程中的單目運(yùn)算符重載與雙目運(yùn)算符重載,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C語言指針的圖文詳解

    C語言指針的圖文詳解

    這篇文章主要為大家介紹了C語言指針,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++用Dijkstra(迪杰斯特拉)算法求最短路徑

    C++用Dijkstra(迪杰斯特拉)算法求最短路徑

    Dijkstra(迪杰斯特拉)算法是典型的最短路徑路由算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。下面這篇文章就給大家介紹關(guān)于C++用Dijkstra算法(迪杰斯特拉算法)求最短路徑的方法,下面來一起看看吧。
    2016-12-12
  • C語言實(shí)現(xiàn)數(shù)獨(dú)游戲

    C語言實(shí)現(xiàn)數(shù)獨(dú)游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)數(shù)獨(dú)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論