亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用C語言編寫基于TCP協議的Socket通訊程序實例分享

2020-01-26 14:40:04
字體:
來源:轉載
供稿:網友

tcp客戶端示例

#include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h>  typedef struct _NSS_HEADER {   unsigned short     ProtocolVersion;    /* 協議版本信息 */   unsigned short     MsgType;        /* 消息類型 */   unsigned short     TransactionNo;     /* 傳輸編號 */   unsigned short     PacketLength;      /* 數據包長度,包括Header */ }NSS_HEADER;   int str_echo(int sockfd, unsigned short no) {   ssize_t readLen;   ssize_t writeLen;   char  buf[8];    NSS_HEADER *hdr = (NSS_HEADER*)buf;   memset( hdr, 0, sizeof(NSS_HEADER) );   hdr->TransactionNo = no;    // 寫數據   int nWriteLen = 0;   while ( true )   {     writeLen = write(sockfd, &buf[nWriteLen], sizeof(NSS_HEADER)-nWriteLen); //    printf( "write %d/n", writeLen);         if (writeLen < 0 && errno == EINTR)     {       continue;     }     else if ( writeLen < 0 )     {       perror ( "write:" );       return -1;     }      nWriteLen += writeLen;     // 已寫完,直接返回     if (nWriteLen >= sizeof(NSS_HEADER) )     {       break;     }   }    printf( "send data successed. trans no: %d/n", no );    // 讀數據   int nReadLen = 8;   while ( true )   {         readLen = read(sockfd, buf, nReadLen); //    printf( "read: %d/n", readLen );     if (readLen < 0 && errno == EINTR)     {       continue;     }     else if ( readLen <= 0 )     {       perror( "read:");       return -1;     }     else      {       nReadLen -= readLen;       if (nReadLen <= 0 )       {         break;       }     }   }    printf( "read response successed./n" );    return 0; }  int main(int argc, char **argv) {   printf("client ip: %s/n", argv[1]);   printf("client port: %s/n", argv[2]);   printf("server ip: %s/n", argv[3]);   printf("server port: %s/n", argv[4]);    printf("/n service starting.../n/n");   while( true )   {     int   socketFd;     struct sockaddr_in svrAddr;     struct sockaddr_in localAddr;      socketFd = socket (AF_INET, SOCK_STREAM, 0);     if ( -1 == socketFd )     {       perror( "socket:" );       continue;     }      // 設置地址可復用     int option = 1;     setsockopt( socketFd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) );     // 客戶端IP     memset(&localAddr, 0, sizeof(localAddr));     localAddr.sin_family = AF_INET;     localAddr.sin_addr.s_addr = inet_addr( argv[1]);     localAddr.sin_port = htons (atoi(argv[2]));      int bindResult = bind(socketFd, (struct sockaddr *) &localAddr, sizeof(localAddr));     if ( -1 == bindResult )     {       perror( "bind:" );       sleep(10);       close(socketFd);       continue;     }      // 服務器IP     memset(&svrAddr, 0, sizeof(svrAddr));     svrAddr.sin_family = AF_INET;     svrAddr.sin_addr.s_addr = inet_addr( argv[3]);     svrAddr.sin_port = htons (atoi(argv[4]));      // 不斷重連     int connResult = connect(socketFd, (struct sockaddr *) &svrAddr, sizeof(svrAddr));     if ( -1 == connResult )     {       perror( "connect:" );       sleep(10);       close(socketFd);       continue;     }          printf (" connect %s:%s successed./n", argv[3], argv[4] );      static unsigned short no = 0;     // 連接成功,每分鐘發送一次數據     for ( ; ; )     {       if ( -1 == str_echo(socketFd, no++) )       {         break;       }              sleep( 60 );     }     close(socketFd);   } } 

tcp服務器源碼示例

#include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h>  struct _NSS_HEADER {   unsigned short     ProtocolVersion;    /* 協議版本信息 */   unsigned short     MsgType;        /* 消息類型 */   unsigned short     TransactionNo;     /* 傳輸編號 */   unsigned short     PacketLength;      /* 數據包長度,包括Header */ }NSS_HEADER;   void str_echo(int sockfd) {   ssize_t readLen;   ssize_t writeLen;   char  buf[8];    while ( true )   {     readLen = read(sockfd, buf, 8);     if (readLen < 0 && errno == EINTR)     {       continue;     }     else if ( readLen <= 0 )     {       perror( "read:");       return ;     }     printf( "recv data successed. data len: %d/n", readLen );      int nWriteLen = 0;     while ( true )     {       writeLen == write(sockfd, &buf[nWriteLen], readLen-nWriteLen);        if (writeLen < 0 && errno == EINTR)       {         continue;       }       else if ( writeLen < 0 )       {         perror ( "write:" );         return;       }        nWriteLen += writeLen;        // 已寫完,直接返回       if (nWriteLen >= readLen )       {         break;       }     }      printf( "send data successed. data len: %d/n", readLen );   } }  int main(int argc, char **argv) {   printf( "server ip: %s/n", argv[1] );   printf( "server port: %s/n", argv[2] );    printf( "/nservice starting ... /n/n" );    int   listenfd, connfd;   pid_t  childpid;   socklen_t clilen;   struct sockaddr_in cliaddr, servaddr;    listenfd = socket (AF_INET, SOCK_STREAM, 0);   if ( -1 == listenfd )   {     perror( "socket:" );     exit(-1);   }    // 設置地址可復用   int option = 1;   setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) );    memset(&servaddr, 0, sizeof(servaddr));   servaddr.sin_family = AF_INET;   servaddr.sin_addr.s_addr = inet_addr( argv[1]);   servaddr.sin_port = htons (atoi(argv[2]));    int bindResult = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));   if ( -1 == bindResult )   {     perror( "bind:" );     exit(-1);   }    int listenResult = listen(listenfd, 5);   if ( -1 == listenResult )   {     perror( "listen:" );     exit(-1);   }    for ( ; ; )    {     clilen = sizeof(cliaddr);     connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);     if ( -1 == connfd )     {       perror( "accept:" );       continue;     }      printf ("accept %s successed.fd: %d/n", inet_ntoa(cliaddr.sin_addr), connfd );      if ( (childpid = fork()) == 0)      { /* child process */       close(listenfd);  /* close listening socket */        str_echo(connfd);  /* process the request */        printf ("disconnect from %d ./n", connfd );         exit (0);     }   }   close(connfd);     /* parent closes connected socket */ } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一福利视频| 欧美高清在线视频观看不卡| 久久五月天综合| 亚洲男人天堂手机在线| 中文字幕欧美日韩在线| 欧美日韩中文在线观看| 2018国产精品视频| 亚洲精品98久久久久久中文字幕| 日本午夜在线亚洲.国产| 正在播放欧美视频| 丰满岳妇乱一区二区三区| 亚洲综合日韩在线| 一区二区三区久久精品| 欧美孕妇与黑人孕交| 欧美最猛性xxxxx(亚洲精品)| 成人黄色av免费在线观看| 91精品国产91久久久久久吃药| 国内精品久久影院| 国产精品久久久久久久久久久久| 亚洲美女久久久| 日韩高清av在线| 欧美噜噜久久久xxx| 欧美激情一区二区久久久| 4p变态网欧美系列| 91免费国产视频| 亚洲精品suv精品一区二区| 欧美激情一级二级| 亚洲精品久久久久久久久久久久| 欧美富婆性猛交| 亚洲欧洲成视频免费观看| 久久99精品视频一区97| 7777精品久久久久久| 国产色视频一区| 国产成人在线视频| 97色伦亚洲国产| 777午夜精品福利在线观看| 欧美一区二区三区图| 亚洲男子天堂网| 久久精视频免费在线久久完整在线看| 久久久国产视频| 97免费在线视频| 久国内精品在线| 亚洲国产日韩欧美综合久久| 亚洲黄在线观看| 欧美最猛性xxxxx(亚洲精品)| 岛国av一区二区在线在线观看| 亚洲欧美国产精品va在线观看| 日本一欧美一欧美一亚洲视频| 91精品久久久久久综合乱菊| 日韩女优在线播放| 精品丝袜一区二区三区| 亚洲欧洲激情在线| 亚洲精品suv精品一区二区| 92国产精品视频| 国产精品视频一| 日本高清不卡的在线| 欧美性xxxxhd| 欧美高清自拍一区| 国产性猛交xxxx免费看久久| 亚洲午夜精品久久久久久性色| 午夜精品久久久久久久99热浪潮| 日韩在线视频观看正片免费网站| 久久在线免费视频| 亚洲天堂网站在线观看视频| 日韩视频在线一区| 精品国产一区二区三区久久| 日韩在线视频中文字幕| 97视频在线观看网址| 午夜精品一区二区三区av| 日韩精品欧美激情| 成人高清视频观看www| 欧美日韩加勒比精品一区| 国产成人精品一区二区在线| 中文字幕亚洲一区在线观看| 精品国产91久久久| 午夜精品久久久久久99热软件| 日韩资源在线观看| 欧美精品中文字幕一区| 国产亚洲精品综合一区91| 亚洲精品99久久久久中文字幕| 97精品视频在线| 亚洲人成网站色ww在线| 日韩免费观看av| 成人在线激情视频| 这里只有精品视频在线| 国产一区二区三区在线观看网站| 欧美激情精品久久久久久大尺度| 国产精品v片在线观看不卡| 91最新在线免费观看| 日韩中文字幕网| 日韩欧美国产免费播放| 5252色成人免费视频| 国产精品最新在线观看| 欧美在线视频导航| 欧美疯狂性受xxxxx另类| 午夜精品久久久久久久久久久久久| 国产精品成人观看视频国产奇米| 久久久精品视频在线观看| 国产精品视频xxx| www高清在线视频日韩欧美| 亚洲精品免费av| 欧美人与性动交a欧美精品| 亚洲成人黄色在线| 国产精品综合网站| 奇门遁甲1982国语版免费观看高清| 欧美巨猛xxxx猛交黑人97人| 欧美激情亚洲精品| 国产99视频精品免视看7| 久久亚洲一区二区三区四区五区高| 欧美天天综合色影久久精品| 91精品国产91久久久久久吃药| 久久99精品视频一区97| 日韩中文字幕视频在线| 黑人巨大精品欧美一区二区一视频| 精品亚洲一区二区三区| 午夜精品久久久久久久久久久久久| 国产成人一区二区在线| 欧美性xxxxx极品| 亚洲视屏在线播放| 亚洲精品电影网站| 在线精品播放av| 欧洲美女免费图片一区| 亚洲欧美国产日韩中文字幕| 日韩精品一区二区视频| 高清欧美性猛交xxxx| 欧美性猛交xxxxx水多| 国产精品第1页| 中文字幕精品网| 97**国产露脸精品国产| 亚洲精品久久久久久久久久久| 亚洲国产99精品国自产| 亚洲精品98久久久久久中文字幕| 欧美成aaa人片在线观看蜜臀| 91香蕉嫩草神马影院在线观看| 久久亚洲精品视频| 欧美综合国产精品久久丁香| 欧美综合在线第二页| 欧美日韩999| 在线观看视频亚洲| 久久久噜噜噜久久| 亚洲人成电影网站色www| 欧美成人精品在线观看| 欧美日本国产在线| 久久不射热爱视频精品| 日韩av免费看| 97久久国产精品| 午夜精品三级视频福利| 成人两性免费视频| 亚洲精品久久久久久下一站| 91免费在线视频| 国产乱人伦真实精品视频| 亚洲成人网在线观看| 中文字幕一精品亚洲无线一区| 97香蕉超级碰碰久久免费软件| 国产精品成人va在线观看| 激情懂色av一区av二区av| 国产精品国内视频| 国产精品对白刺激| 欧美国产视频日韩| 欧美性猛交xxxx免费看漫画| 精品女同一区二区三区在线播放| 亚洲精品一区二区网址| 欧美激情手机在线视频| 国产精品自拍视频|