亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vcserver.c

?? Linux網絡編程配套源代碼 不過看的時候最好和書籍一起配套看
?? C
字號:
/*  vcserver.c  server  */



#include <stdio.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>    /* sockaddr_in 結構體 */



/* 下面的這個include可以使程序查詢主機名字列表,

找出所有與其IP綁定的hostname */

#include <netdb.h>          /* 預定義/etc/hosts列表 */

main (int argc, char *argv[])

{

   int rc,            /* 系統調用return code */

       new_sd, sock,  /* server/listen 套接字標識符 */

       adrlen,        /* sockaddr 長度 */

       cnt;           /* number of bytes I/O */

   struct sockaddr_in myname;  /* Internet套接字名稱 */

   struct sockaddr_in *nptr;   /* ptr 獲取端口號 */

   struct sockaddr    addr;    /* 通用套接字名稱 */

   char buf[80];   /* I/O 緩沖區定義 */

   /* 在 /etc/hosts 文件中查找  */

   struct hostent *hp, *gethostbyaddr();

   /* 標識服務器進程,打印其PID */



   printf("\nThis is the network server with pid %d\n",

        getpid() );



   /* 建立一個傾聽套接字 */



   if (( sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {

      printf("network server socket failure %d\n", errno);

      perror("network server");

      exit(1);

}

   /* 初始化套接字地址結構中的各個參數              */

   myname.sin_family = AF_INET;  /* Internet地址 */

   myname.sin_port = 0;  /* 系統會綁定端口號  */

   myname.sin_addr.s_addr = INADDR_ANY;  

   /* 將IP地址結構與套接字綁定,調用bind()函數 */



   if (bind(sock, &myname, sizeof(myname) ) < 0 ) {

      close(sock);  /* defensive programming  */

      printf("network server bind failure %d\n", errno);

      perror("network server");

      exit(2);

   }



   /*	獲取套接字端口號。調用getsockname()可以得到與套接字相關聯

的端口號,并作為套接字地址結構中的一部分返回。記錄

這個端口號以供客戶端程序使用。

	*/

   adrlen = sizeof(addr); /* 地址長度為整形值 */

   if ( ( rc = getsockname( sock, &addr, &adrlen ) ) < 0 )

	{

      printf("setwork server getsockname failure %d\n",

				errno);

      perror("network server");

      close (sock);

      exit(3);

   }



   /*	調試說明:

通用套接字地址addr被用來存放getsockname()返回的套接字的值。

打印這個信息。在一般的地址聲明中,除了地址族其余的都被定

義為字符串類型。Getsocknae()調用之后,這個通用套接字地址

結構addr就會被用來存放關于客戶端進程的信息。*/

   printf("\nAfter getsockname():");

   printf(" server listen socket data\n");

   printf("\taddr.sa_family field value is: %d\n",

        addr.sa_family);

   printf("\taddr.sa_data string is %d bytes long;\n",

        sizeof ( addr.sa_data ) );

   printf("\taddr.sa_data string is:");

   for ( cnt = 0; cnt < sizeof (addr.sa_data); cnt++)

        printf(" %x", addr.sa_data[cnt]);

   printf("\n");



   /*	現在需要記錄下來套接字的端口號。在這里端口號將作為啟動客戶端程

序的一個命令行參數使用。  */

   /*	注意指針nptr,它是指向通用套接字地址結構的一個指針		*/



   nptr = (struct sockaddr_in *) &addr;  /* port # */

   printf("\n\tnetwork server: server has port number: %d\n",

      ntohs ( nptr -> sin_port ) );



   /*  調用listen()函數 */

   if ( listen ( sock, 5 ) < 0 ) {

      printf("network server bind failure %d\n", errno);

      perror("network server");

      close (sock);

      exit(4);

   }



   /* 調試輸出:

下面輸出結構體myname中所包含的套接字信息         */

   printf("Server has set up client socket with values:\n");

   printf("\tInternet address is %lx\n", myname.sin_addr.s_addr);

   printf("\tPort number used is %d\n", myname.sin_port);

   printf("\tInternet family ID is %d\n", myname.sin_family);

   printf("\tValues are filled in after connection request ");

   printf("is accepted.");

   /* 設置初始死循環以等待客戶端進程的連接請求。由于結構體myname已經和傾聽套接字綁

定,通過accept()調用可以獲得套接字結構名稱和套接字長度參數。           */

   while (1) {

      if ( ( new_sd = accept ( sock, 0, 0 ) ) < 0 ) {

         printf("network server accept failure %d\n", errno);

         perror("network server");

         close (sock);

         exit(5);

      }

      /* 通過fork()函數建立子進程來處理客戶端服務請求。*/

      if ( ( fork() ) == 0 ) {    /* 子進程 */

         int pid;

         pid = getpid();   /* 獲取子進程的PID */

         close (sock); /* 子進程中不再需要父進程的參與 */

         /* 查找出客戶端所在。注意通用套接字地址結構addr的用法,獲取客戶端信息      */



         if ((rc = getpeername( new_sd, &addr, &adrlen )) < 0) {

            printf("network server %d getpeername failure %d\n",

                 pid, errno);

            perror("network server");

            close(new_sd);

            exit(6);

         }

         /* 答應客戶端信息。由于指針nptr是一個sockaddr_in結構體指針,

在這個結構體中的地址名稱就可以傳遞給通用地址結構體addr。               */

         printf("\n\tnetwork server %d:", pid);

         printf(" client socket from host %s\n",

              inet_ntoa ( nptr -> sin_addr ) );

         printf("\t     has port number %d\n",nptr -> sin_port);

         /*	現在找到了所有與客戶端相關的信息,并且可以通過在/etc/hosts

中查找來確定客戶端的域名   */

         if (( hp = gethostbyaddr (&nptr -> sin_addr,4,AF_INET))

                  != NULL ) {

            printf ("\tfrom hostname: %s\n\twith aliases: ",

                   hp -> h_name );

            while ( *hp -> h_aliases )

               printf ("\n\t\t\t%s", *hp -> h_aliases++ );

            printf("\n\n");

         }

         else {

            printf("network server %d ", pid);

            printf("gethostbyaddr failure %d\n", h_errno);

            perror("network server");

         }



         /*  與客戶端交換數據。首先清除緩沖區	*/



         do {

			  memset  (buf,0,sizeof(buf));  /* 清空緩沖區 */

            /* bzero( buf, sizeof(buf));* 清空緩沖區, BSD 調用. */

            /* 用read()函數從套接字緩沖區中讀取遠程客戶端發送的數據,如果

數據長度為0則退出。*/



            if (( cnt = read (new_sd, buf, sizeof(buf))) < 0 ) {

               printf("network server %d ", pid);

               printf("socket read failure &d\n", errno);

               perror("network server");

               close(new_sd);

               exit(7);

            }

            else

            if (cnt == 0) {

               printf("network server received message");

               printf(" of length %d\n", cnt);

               printf("network server closing");

               printf(" client connection...\n");

               close (new_sd);

               continue; /* 循環終止點 */

            }

            else {



               /*  打印出接收到的信息,并發送回執       */



               printf("network server %d received message",pid);

               printf(" of length %d\n", cnt);

               printf("network server %d  received", pid);

               printf(" the message %s\n", buf);

				 memset  (buf,0,sizeof(buf));  /* 清空緩沖區 */

          	 /* bzero( buf, sizeof(buf)); * 清空緩沖區, BSD 調用. */

               strcpy(buf, "Message from server to client");

               write (new_sd, buf, sizeof(buf));

            }  /* end of message-print else */

         }  /* end of do loop  */



         while (cnt != 0);  /* 循環條件 */

         exit(0);  /* 子進程結束 */



      } /* End of if-child-process  */



      else      /* 非子進程,父進程條件判斷 */

         close (new_sd); /* 父進程不需要此套接字 */



   }  /* end of while (1) */

}  /* end of main procedure */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美浪妇xxxx高跟鞋交| 亚洲欧美日韩国产成人精品影院| 欧美日韩一二区| 91社区在线播放| 高清成人在线观看| 精品一区二区三区在线播放视频| 亚洲一区二区免费视频| 亚洲柠檬福利资源导航| 国产欧美日韩另类一区| 日韩午夜激情视频| 91精品欧美一区二区三区综合在| 一道本成人在线| 成人黄色片在线观看| 国产福利91精品| 成人ar影院免费观看视频| 国产福利一区二区| 国产成人夜色高潮福利影视| 蜜臀av一区二区在线免费观看 | 欧美videos大乳护士334| 99精品在线观看视频| 成人黄色电影在线| 成人高清免费在线播放| 成人午夜视频福利| 东方aⅴ免费观看久久av| 国产成人综合自拍| 国产999精品久久| 国产电影精品久久禁18| 天天综合色天天综合色h| 性欧美大战久久久久久久久| 天天综合色天天| 亚洲国产精品欧美一二99| 一区二区免费看| 石原莉奈一区二区三区在线观看| 丝袜美腿亚洲综合| 亚洲成av人片在线观看无码| 亚洲r级在线视频| 男人的天堂亚洲一区| 久久成人久久爱| 国产精品系列在线播放| 成人午夜免费视频| 一本色道久久综合亚洲91| 欧美自拍丝袜亚洲| 色综合av在线| 欧美一级免费大片| 精品国产精品一区二区夜夜嗨| 久久久久久电影| 国产精品久久久久久久久免费樱桃 | 激情综合一区二区三区| 国产精品99久久久久久久女警 | 国产精品一区二区三区乱码| 国产精品综合久久| 99久久伊人精品| 欧美日韩另类一区| 亚洲精品一区二区三区精华液| 国产日韩欧美不卡在线| 一区二区欧美视频| 久久99久久99精品免视看婷婷| 国产一区不卡精品| 91久久香蕉国产日韩欧美9色| 97精品电影院| 欧美一区二区三区色| 国产亚洲欧美色| 一区二区三区在线观看欧美 | 免费高清在线一区| 国产成人精品一区二| 欧美三级三级三级爽爽爽| 欧美成人一级视频| 亚洲免费看黄网站| 国产做a爰片久久毛片| 青椒成人免费视频| 麻豆国产精品一区二区三区| 亚洲国产精品激情在线观看| 夜夜嗨av一区二区三区 | www.av精品| 欧美精品一区二区三区一线天视频| 亚洲精品乱码久久久久久日本蜜臀| 国产主播一区二区| 91精品国产91综合久久蜜臀| 一区二区高清免费观看影视大全| 国产成人精品亚洲777人妖| 欧美一区二区三区四区在线观看| 一区二区三区在线观看国产| 成人av在线观| 久久久久久麻豆| 精品在线亚洲视频| 91精品免费观看| 亚洲高清久久久| 在线观看视频一区| 亚洲另类中文字| 9l国产精品久久久久麻豆| 国产午夜精品久久久久久免费视 | 中文字幕一区二区三区视频| 国产综合久久久久久久久久久久| 欧美一级生活片| 天天色天天操综合| 欧美日韩一卡二卡三卡| 亚洲国产精品一区二区尤物区| 91麻豆免费视频| 亚洲欧美经典视频| 99re这里只有精品首页| 亚洲人123区| 色8久久人人97超碰香蕉987| 亚洲欧美二区三区| 91视频你懂的| 亚洲综合男人的天堂| 欧美影院精品一区| 亚洲线精品一区二区三区| 欧美三级在线看| 日韩和的一区二区| 欧美一卡二卡三卡| 蜜桃精品视频在线| 久久尤物电影视频在线观看| 国产一区二区0| 亚洲国产精品传媒在线观看| 岛国av在线一区| 亚洲视频在线一区二区| 色婷婷亚洲精品| 日韩精品一级中文字幕精品视频免费观看| 欧美日韩一区在线观看| 日韩精品成人一区二区三区| 欧美成人性战久久| 国产成人免费9x9x人网站视频| 国产精品福利一区二区三区| 色哟哟在线观看一区二区三区| 亚洲国产va精品久久久不卡综合| 欧美一级免费大片| 国产成人av一区| 亚洲综合一区二区三区| 欧美一区二区美女| 国产suv精品一区二区三区| 中文字幕一区二区三区四区不卡| 在线精品亚洲一区二区不卡| 日韩av一区二| 久久久av毛片精品| 91麻豆免费看片| 日本一不卡视频| 国产精品萝li| 在线成人小视频| 成人在线视频首页| 亚洲网友自拍偷拍| 久久婷婷国产综合国色天香| 91亚洲精品一区二区乱码| 日本亚洲天堂网| 中文字幕第一页久久| 欧美无砖专区一中文字| 国产在线精品视频| 有坂深雪av一区二区精品| 日韩精品一区二区三区在线观看 | 久久精品一区二区三区av| 99riav一区二区三区| 人禽交欧美网站| 国产精品国产三级国产aⅴ无密码| 欧美精品欧美精品系列| 波多野结衣中文一区| 日本aⅴ免费视频一区二区三区| 中文字幕国产精品一区二区| 337p亚洲精品色噜噜| 国产v日产∨综合v精品视频| 日韩中文欧美在线| 亚洲天天做日日做天天谢日日欢 | 日韩理论片网站| 欧美成人vps| 欧美亚州韩日在线看免费版国语版| 国内精品在线播放| 亚洲一区二区三区在线看| 国产网站一区二区| 日韩一级大片在线观看| 色老汉一区二区三区| 国产91精品欧美| 蜜臀av一级做a爰片久久| 亚洲最大成人综合| 国产精品免费看片| 久久久亚洲高清| 在线不卡中文字幕| 色婷婷av一区二区三区软件| 国产精品1024久久| 麻豆精品国产传媒mv男同| 一区二区三区高清| 中文欧美字幕免费| 久久午夜免费电影| 日韩免费观看高清完整版| 欧美日韩综合色| 91老师片黄在线观看| 国产91精品入口| 国产精品18久久久久久久久久久久 | 97久久人人超碰| 国产成人精品免费在线| 久久电影国产免费久久电影| 首页国产欧美日韩丝袜| 一区二区三区精品视频| 成人欧美一区二区三区小说| 国产色爱av资源综合区| 精品不卡在线视频| 日韩精品一区二区三区视频播放| 这里是久久伊人| 91精品国产欧美日韩| 欧美精品日韩综合在线| 欧美日韩精品电影| 欧美人体做爰大胆视频| 欧美日韩在线综合|