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

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

?? server_notes.c

?? RIP協議所采用的UDP通信模塊,該程序是UDP通信的服務器端程序
?? C
字號:
/****************************************************
*Windows環境下使用VC編寫的TCP通信服務器端程序
*在編譯這個程序時,需要在工程設置項目--〉連接項目中添加如下兩項:
*        Ws2_32.lib和Winmm.lib
*否則編譯后鏈接生成可執行文件時會出錯!
*服務器程序在單機內的測試運行方法:
* server [監聽端口:缺省為9999]
* 
*程序中的函數列表:
*int InitSockets(void): 插口(套接字)初始化
*void ServeAClient(LPVOID lpv):為客戶提供服務的函數
*int ServerLoop(SOCKET sd_listen, int isMultiTasking):
*         服務器循環函數,服務期間總是在這個函數中循環
*********************************************************/

#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
/*
由于Winsock目前有兩個版本:2.2和1.1,所以我們首先必須判斷系統所支持的Winsock版本,這就要靠WSAStartup函數了。
另外還有一個WSACleanup函數,這兩個函數是Winsock編程必須調用的,其中WSAStartup函數的功能是初始化Winsock DLL,因為在Windows下,Socket是以DLL的形式實現的。1.1版本的DLL為Winsock.dll,而2.2版本的DLL則為Wsock32.dll,其中在2.2版本的系統中,對Winsock1.1函數的調用會由Wsock32.dll自動映射到Winsock.dll。WSAStartup函數的功能就是初始化DLL,其函數原型為: int WSAStartup (WORD wVersionRequested,LPWSADATA lpWSAData); 其第一個參數為你所想需要的Winsock版本!低字節為主版本,高字節為副版本!由于目前Winsock有兩個版本:1.1和2.2,因此該參數可以是0x101或0x202;第2個參數是一個WSADATA結構,用于接收函數的返回信息!WSAStartup函數調用成功會返回0,否則返回非0值! 
由于Win 95,WinNT4自帶的Winsock是1.1版本的,所以如果你的程序是基于Winsock2.2的,那很可能無法在上面運行。因此,如果你希望你寫的程序被所有Windows平臺支持的話,最好將其聲明成1.1版的,不過這樣將無法使用很多Winsock2.2才有的特性!至于WSACleanup的用法很簡單,用“WSACleanup();”就行了!另外,在DLL內部維持著一個計數器,只有第一次調用WSAStartup才真正裝載DLL,以后的調用只是簡單的增加計數器,而WSACleanup函數的功能則剛好相反,每調用一次使計數器減1,當計數器減到0時,DLL就從內存中被卸載!因此,你調用了多少次WSAStartup,就應相應的調用多少次的WSACleanup!
*/

int InitSockets(void)
{
    WSADATA wsaData;
    WORD wVersionRequested;
    int err;
    /* Ask for Winsock 1.1 functionality */
    wVersionRequested = MAKEWORD( 1, 1 );
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
      printf("Error %d: Winsock not available\n", err);
      return 1;
      }
    return 0;
}

#define WSA_ERROR(x)  { printf("Error %d: %s\n", \
    WSAGetLastError(), x); return 1; }

int ServerLoop(SOCKET sd_listen, int isMultiTasking);

main(int argc, char **argv)
{
    SOCKET sd_listen;
    int err;
    u_short iPort;
    struct sockaddr_in addr_srv;
    struct hostent *ptrHost;
    
    iPort = (argc >= 2) ? atoi(argv[1]) : 9999;//從命令行中提取服務器監控的端口號,如果命令行沒有帶數字格式的端口號,則定為9999
    
    InitSockets();//初始化套接字
/*
創建套接字有兩個函數,socket和WSASocket,前者是標準的Socket函數,而后者是微軟對Socket的擴展函數。socket函數有3個參數,第一個是指定通信發生的區域,在UNIX下有AF_UNIX、AF_INET、AF_NS等,而在Winsock1.1下只支持AF_INET,到了2.2則添了AF_IRDA(紅外線通信)、AF_ATM(異步網絡通信)、AF_NS、AF_IPX等;第2個參數是套接字的類型,在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三種套接字類型。SOCK_STREAM也就是通常所說的TCP,而SOCK_DGRAM則是通常所說的UDP,而SOCK_RAW則是用于提供一些較低級的控制的;第3個參數依賴于第2個參數,用于指定套接字所用的特定協議,設為0表示使用默認的協議。socket函數調用成功返回一個套接字描述符,錯誤則返回SOCKET_ERROR。 
*/
    sd_listen = socket(PF_INET, SOCK_STREAM, 0);
    if (sd_listen == INVALID_SOCKET) {
        printf("Error: out of socket resources\n");
        return 1;
        }
/*
接下來要為服務器端定義的這個監聽的socket指定一個地址及端口(Port),這樣客戶端才知道要連接哪一個地址的哪個端口,為此我們首先設置數據結構struct sockaddr中的參數,隨之調用bind()函數將socket邦定在指定的端口和地址上,該函數調用成功返回0,否則返回SOCKET_ERROR。sockaddr_in結構的sin_addr.s_addr成員被設置為INADDR_ANY,意味著由操作系統給socket自動指定一個最有效的IP地址。
*/
    addr_srv.sin_family = PF_INET;
    addr_srv.sin_addr.s_addr = htonl(INADDR_ANY);
    addr_srv.sin_port = htons(iPort);

    err = bind(sd_listen, (const struct sockaddr *) &addr_srv,
               sizeof(addr_srv));
    if (err == INVALID_SOCKET)
        WSA_ERROR("Error: unable to bind socket\n")
/*
當服務器端的Socket對象綁定完成之后,服務器端必須通知操作系統為這個socket建立一個監聽隊列來接收客戶端的連接請求。listen()函數使服務器端的Socket 進入監聽狀態,并設定可以建立的最大連接數。該函數調用成功返回0,否則返回SOCKET_ERROR。
*/
    err = listen(sd_listen, SOMAXCONN);
    if (err == INVALID_SOCKET)
        WSA_ERROR("Error: listen failed\n")

//程序進入服務循環函數
    ServerLoop(sd_listen, 1);
    printf("Server is down\n");
    WSACleanup(); 
    return 0;
}



/*
如果客戶端發來HELLO SERVER,
那么服務器端將回送HELLO CLIENT,
不符合的輸入,服務器端將沒有響應
*/
void ServeAClient(LPVOID lpv)
{
    SOCKET sd_accept = (SOCKET) lpv;
    const char *msg = "HELLO CLIENT";
    char response[4096];

    memset(response, 0, sizeof(response));
    recv(sd_accept, response, sizeof(response), 0);
    if (strcmp(response, "HELLO SERVER")) {
        printf("Application:  client not using expected "
            "protocol %s\n", response);
      }
    else
        send (sd_accept, msg, strlen(msg)+1, 0);
    closesocket(sd_accept);
}

#define   MAX_SERVED         3
//服務器端的循環函數,服務期間總是在這個函數中運行
int ServerLoop(SOCKET sd_listen, int isMultiTasking)
{
    SOCKET sd_accept;
    struct sockaddr_in addr_client;
    int err, nSize;
    int numServed = 0;
    HANDLE handles[MAX_SERVED];
    int myID;
  //主循環體,服務期間總是在這個結構內循環
    while (numServed < MAX_SERVED) {

      nSize = sizeof(addr_client);
    //在套接字sd_listen上接收到客戶端的連接請求后,建立一個新的套接字sd_accept,
    //使用套接字sd_accept與客戶端進行通信
      sd_accept = accept(sd_listen, (struct sockaddr *)
                         &addr_client, &nSize);
      if (sd_accept == INVALID_SOCKET)
          WSA_ERROR("Error: accept failed\n")

      printf("Accepted connection from client at %s\n",
             inet_ntoa(addr_client.sin_addr));
    //如果服務器端允許工作在并發多任務模式(isMultiTasking為程序員設定的標志)
      if (isMultiTasking) {
#ifdef _WIN32 //適應不同版本的編譯環境,較新的系統都定義了_WIN32
    // 建立一個新的線程,線程程序代碼為ServeAClient,傳遞的參數為通信套接字sd_accept
          handles[numServed] = CreateThread(NULL, 1000,
                      (LPTHREAD_START_ROUTINE)ServeAClient,
                      (LPVOID) sd_accept, 0, &myID);
#else
          myID = fork();
          if (myID == 0) { /* I am child process */
             ServeAClient ((LPVOID) sd_accept);
             exit(0);
             }
          handles[numServed] = myID;
#endif
          }
      else
          ServeAClient((LPVOID) sd_accept);
      numServed++;
      }

    if (isMultiTasking) {
#ifdef _WIN32
        //等待線程組handles中的線程結束,并顯示運行狀態
        err = WaitForMultipleObjects(MAX_SERVED, handles,
                                     TRUE, INFINITE);
        printf("Last thread to finish was thread #%d\n", err);
#endif
        }
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av资源在线观看| 乱一区二区av| 国产精品天干天干在观线| 精品蜜桃在线看| 精品国产91洋老外米糕| 欧美电影免费观看完整版| 欧美一区二区三区小说| 欧美一区二区三区婷婷月色| 777xxx欧美| 欧美mv日韩mv国产网站app| 日韩精品一区二| 欧美韩国一区二区| 亚洲摸摸操操av| 天天做天天摸天天爽国产一区| 水蜜桃久久夜色精品一区的特点| 天堂一区二区在线免费观看| 男女男精品网站| 成人晚上爱看视频| 欧美综合一区二区三区| 欧美一区午夜视频在线观看| 日韩欧美成人一区二区| 亚洲国产精品ⅴa在线观看| 亚洲麻豆国产自偷在线| 日本va欧美va瓶| 国产成人夜色高潮福利影视| 99久久久无码国产精品| 欧美精品日韩一区| 中文字幕成人av| 日本sm残虐另类| 成人综合婷婷国产精品久久| 欧美三级电影精品| 国产无一区二区| 日韩一区欧美一区| 男人的j进女人的j一区| 99国产精品久久久久| 欧美电影在哪看比较好| 中文字幕av不卡| 老司机精品视频线观看86| av网站一区二区三区| 日韩欧美一级在线播放| 亚洲精品日韩专区silk| 国产在线精品一区二区夜色| 欧美亚洲综合另类| 亚洲国产高清在线| 精品无人区卡一卡二卡三乱码免费卡| 99精品在线观看视频| 精品国产一区二区三区av性色| 亚洲欧美激情在线| 国产成人精品免费在线| 欧美一区二区三区成人| 一二三区精品福利视频| www.激情成人| 国产欧美一区二区精品婷婷| 天天射综合影视| 欧美专区日韩专区| 亚洲色图在线看| 成人av在线资源网站| 久久久久久久久久久电影| 五月天亚洲精品| thepron国产精品| 精品国精品国产尤物美女| 午夜在线成人av| 欧美日韩极品在线观看一区| 中文字幕人成不卡一区| av欧美精品.com| 国产精品久久一级| 99在线精品观看| 综合婷婷亚洲小说| 91麻豆高清视频| 亚洲精品久久嫩草网站秘色| 色综合中文字幕国产| 久久久美女毛片| 国产精品亚洲第一区在线暖暖韩国| 日韩一区二区三区四区| 日本不卡视频在线| 精品乱码亚洲一区二区不卡| 另类人妖一区二区av| 日韩精品一区二区三区swag| 蜜臀av一级做a爰片久久| 精品久久一二三区| 国产精品一品视频| 亚洲国产成人一区二区三区| 成人免费va视频| 亚洲黄网站在线观看| 精品视频123区在线观看| 奇米综合一区二区三区精品视频| 欧美变态tickling挠脚心| 久草精品在线观看| 国产精品视频观看| 日本韩国视频一区二区| 天天综合色天天综合色h| 欧美成人精品高清在线播放 | 国产丝袜美腿一区二区三区| 韩国女主播成人在线观看| 欧美激情中文不卡| 91美女片黄在线观看91美女| 午夜欧美一区二区三区在线播放| 欧美一区二区视频在线观看| 精品一区二区在线看| 国产精品毛片久久久久久久 | 午夜精品久久久久久久久久| 91精品国产一区二区| 成人综合在线观看| 亚洲成人一区二区| 日韩欧美亚洲一区二区| 成人美女视频在线观看18| 一区二区三区毛片| 日韩一区二区在线观看视频| 成人国产精品免费观看视频| 午夜日韩在线电影| 国产精品国产三级国产aⅴ无密码| 91福利在线看| 国产大片一区二区| 亚洲成人第一页| 国产精品久久久久久亚洲伦| 91.com视频| 色婷婷激情综合| 国产精品一区二区久久精品爱涩 | 国产一区二区三区av电影| 18成人在线观看| 日韩免费性生活视频播放| av一二三不卡影片| 国产资源精品在线观看| 亚洲国产日韩综合久久精品| 国产亚洲欧洲一区高清在线观看| 欧美日韩在线精品一区二区三区激情| 国产激情视频一区二区三区欧美 | 成人午夜视频网站| 久久er精品视频| 日韩福利电影在线| 亚洲一二三级电影| 日韩伦理av电影| 久久精品亚洲国产奇米99| 日韩三级视频中文字幕| 欧美在线色视频| 一本久久综合亚洲鲁鲁五月天 | 亚洲免费看黄网站| 国产精品久久精品日日| www日韩大片| 精品对白一区国产伦| 91麻豆精品国产91久久久更新时间| 91丨九色丨黑人外教| 成人av午夜电影| 国产精品18久久久久久久久 | 久久精品视频免费观看| 欧美丰满美乳xxx高潮www| 色久优优欧美色久优优| 色综合久久综合| 欧美综合色免费| 欧美亚洲动漫精品| 欧美视频日韩视频| 日韩欧美国产小视频| 7777精品伊人久久久大香线蕉完整版| 欧美色精品天天在线观看视频| 91浏览器入口在线观看| 一本一道久久a久久精品综合蜜臀| 99久久久无码国产精品| 97精品电影院| 欧美日韩一级黄| 日韩一级完整毛片| 精品国产麻豆免费人成网站| 日韩三级免费观看| 欧美精品一区二区三区久久久| 久久精品综合网| 自拍偷拍国产精品| 午夜精品久久久久久久99樱桃| 六月丁香综合在线视频| 激情小说亚洲一区| 99久久99久久精品国产片果冻| 欧美亚洲一区二区在线观看| 欧美日韩五月天| 精品三级av在线| 国产欧美一区二区三区在线老狼| 国产精品亲子伦对白| 亚洲精品中文在线观看| 日韩成人免费电影| 国产成人精品在线看| 色999日韩国产欧美一区二区| 69堂国产成人免费视频| 久久一区二区三区四区| 中文字幕一区三区| 五月综合激情网| 国产精品99久久久久久久女警 | 欧美一级在线免费| 国产日韩精品一区| 亚洲自拍欧美精品| 国产一区欧美日韩| 欧美视频在线播放| 欧美国产精品中文字幕| 午夜精品福利一区二区蜜股av| 国模少妇一区二区三区| 91久久精品网| 久久久99精品久久| 五月婷婷色综合| 97国产一区二区| 欧美精品一区二区蜜臀亚洲| 亚洲激情图片一区| 成人黄色片在线观看| 欧美一区二区三区系列电影| 亚洲乱码国产乱码精品精98午夜 |