<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      socketAPI:一個最簡單的服務器和對應的客戶端C語言的實現

      基于linux,該實例實現了服務端傳了一個hello world給客戶端。
      socket()創建socket
      bind()綁定socket到IP地址和端口
      listen()服務器監聽客戶端的連接
      connect()客戶端連接到服務器
      accept()應用程序接受完成3次握手的客戶端連接
      send() recv() write() read()機器間相互發送數據
      close() 關閉socket
      gethostbyname()   gethostbyaddr() V4專有
      select() poll() 處理多個連接的讀、寫和錯誤狀態
      getsockopt()得到對應socket的選項值
      setsockopt()設置對應socket的選項值


      具體代碼如下:


      服務端部分:

      #include <sys/types.h>
      #include <sys/socket.h>
      #include <netinet/in.h>
      #include <arpa/inet.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <unistd.h>

      int main(int argc, char** argv)
      {
          char hello[] = "hello world";
          struct sockaddr_in sa;
          int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

          if (-1 == SocketFD) {
              perror("cannot create socket");
              exit(EXIT_FAILURE);
          }
          memset(&sa, 0, sizeof sa);

          sa.sin_family = AF_INET;
          sa.sin_port = htons(2222);
          sa.sin_addr.s_addr = htonl(INADDR_ANY);

          if (-1 == bind(SocketFD, (struct sockaddr*)&sa, sizeof sa)) {
              perror("bind failed");
              close(SocketFD);
              exit(EXIT_FAILURE);
          }
          if (-1 == listen(SocketFD, 10)) {
              perror("listen failed");
              close(SocketFD);
              exit(EXIT_FAILURE);
          
          }

          for (;;) {
              int ConnectFD = accept(SocketFD, NULL, NULL);

              if (0 > ConnectFD) {
                  perror("accept failed");
                  close(SocketFD);
                  exit(EXIT_FAILURE);
              }

              int writeSize = 0;
              size_t totalWrite = 0;
              while (totalWrite < sizeof(hello)) {
                  writeSize =
                      write(ConnectFD, hello + totalWrite, sizeof(hello) - totalWrite);
                  if (-1 == writeSize) {
                      perror("write failed");
                      close(ConnectFD);
                      close(SocketFD);
                      exit(EXIT_FAILURE);
                  }
                  totalWrite += writeSize;            
              }
              if(-1==shutdown(ConnectFD,SHUT_RDWR)){
                  perror("shutdown failed");
                  close(ConnectFD);
                  close(SocketFD);
                  exit(EXIT_FAILURE);        
              }
              close(ConnectFD);    
          }
          close(SocketFD);
          return EXIT_SUCCESS;
      }


      客戶端部分:

      #include <sys/types.h>
      #include <sys/socket.h>
      #include <netinet/in.h>
      #include <arpa/inet.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <unistd.h>

      int main(int argc, char** argv)
      {
          char hello[] = "hello world";
          struct sockaddr_in sa;
          int SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

          if (-1 == SocketFD) {
              perror("cannot create socket");
              exit(EXIT_FAILURE);
          }
          memset(&sa, 0, sizeof sa);

          sa.sin_family = AF_INET;
          sa.sin_port = htons(2222);
          res = inet_pton(AF_INET, "127.0.0.1", &sa.sin_addr);

          if (-1 == connect(SocketFD, (struct sockaddr*)&sa, sizeof sa)) {
              perror("connect failed");
              close(SocketFD);
              exit(EXIT_FAILURE);
          }
          char buffer[512];
          int totalRead = 0;
          for (;;) {
              int readSize = 0;
              readSize = read(SocketFD, buffer + totalRead, sizeof(buffer) - totalRead);
              if (readSize == 0) {
                  break;
              }
              else if (readSize == -1) {
                  perroe("read failed");
                  close(SocketFD);
                  exit(EXIT_FAILURE);        
              }
              totalRead += readSize;
          }
          buffer[totalRead] = 0;
          printf("get from server:%s\n", buffer);
          
          (void)shutdown(SocketFD, SHUT_RDWR);
          close(SocketFD);
          return EXIT_SUCCESS;
      }


      客戶端和服務端哪一邊主動的調用了close函數,哪一邊進入TIME_WAIT
                                                     

      posted @ 2016-09-19 17:27  千年風雅丶  閱讀(5549)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 国产精品久久久久精品日日| 无码成人午夜在线观看| 欧美性猛交xxxx免费看| 唐人社视频呦一区二区| 无码人妻出轨黑人中文字幕| Y111111国产精品久久久| 日本一区二区三区在线播放| 女高中生自慰污污网站| 国产一区二区三区尤物视频 | 欧洲精品码一区二区三区| 亚洲国产在一区二区三区 | 国产精品久久国产精麻豆99网站| 国产AV无码专区亚洲AV漫画| 18禁免费无码无遮挡不卡网站| 性色欲情网站iwww九文堂| 亚洲国产色婷婷久久99精品91| 亚洲sm另类一区二区三区| 两当县| 成人午夜大片免费看爽爽爽| 亚洲欧美人成电影在线观看| 做暖暖视频在线看片免费| 天天澡天天揉揉av无码| 久久人人妻人人爽人人爽| 国产精品毛片一区二区三| 亚洲综合成人av在线| 一区二区三区不卡国产| 精品国产成人国产在线视| 三级国产在线观看| 国产一级黄色片在线观看| 久久亚洲国产精品久久| 中文字幕日韩有码一区| 四虎影视www在线播放| 中文字幕无码视频手机免费看| 久久99精品久久久大学生| 波多野结衣一区二区三区高清av| 国产亚洲AV电影院之毛片| 亚洲第一区二区快射影院| 亚洲成人av综合一区| 人妻日韩精品中文字幕| 国产裸体永久免费无遮挡| 亚洲国产亚洲综合在线尤物|