日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 玩轉重要的select函數并分析其行為

玩轉重要的select函數并分析其行為

來源:程序員人生   發布時間:2015-03-04 08:49:08 閱讀次數:7783次

       說明:  雖然select函數在Windows和Linux上的用法有些差異, 且這些差異值得我們特別注意, 但從功能上來說, 他們還是差不多的。 本文, 我們僅僅斟酌Windows上的select函數。


      關于select函數的原型和用處, 百度和谷歌的介紹到處都是, 在本文中, 我就不贅述了, 我們僅僅來玩代碼并作扼要分析。 如果有不對或偏頗的地方, 大家可以各抒己見, 共同進步,我也一定會認真核實后給予回應奮斗, 也建議大家多多實踐。



       程序1, 服務端程序:

#include <stdio.h> #include <winsock2.h> // winsock接口 #pragma comment(lib, "ws2_32.lib") // winsock實現 int main() { WORD wVersionRequested; // 雙字節,winsock庫的版本 WSADATA wsaData; // winsock庫版本的相干信息 wVersionRequested = MAKEWORD(1, 1); // 0x0101 即:257 // 加載winsock庫并肯定winsock版本,系統會把數據填入wsaData中 WSAStartup( wVersionRequested, &wsaData ); // AF_INET 表示采取TCP/IP協議族 // SOCK_STREAM 表示采取TCP協議 // 0是通常的默許情況 unsigned int sockSrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; // TCP/IP協議族 addrSrv.sin_addr.S_un.S_addr = INADDR_ANY; addrSrv.sin_port = htons(8888); // socket對應的端口 // 將socket綁定到某個IP和端口(IP標識主機,端口標識通訊進程) bind(sockSrv,(SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); // 將socket設置為監聽模式,5表示等待連接隊列的最大長度 listen(sockSrv, 5); SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); unsigned int sockConn = accept(sockSrv,(SOCKADDR*)&addrClient, &len); while(1) { getchar(); char sendBuf[100] = "hello"; send(sockConn, sendBuf, strlen(sendBuf) + 1, 0); // 發送數據到客戶端,最后1個參數1般設置為0 } closesocket(sockConn); closesocket(sockSrv); WSACleanup(); return 0; }


        程序2, 客戶端程序:

#include <winsock2.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") int main() { WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(1, 1); WSAStartup( wVersionRequested, &wsaData ); SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(8888); int ret = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); fd_set read_set; struct timeval t; FD_ZERO(&read_set); FD_SET(sockClient, &read_set); t.tv_sec = 20; t.tv_usec = 0; while(1) { ret = select(⑴, &read_set, NULL, NULL, &t); printf("ret is %d ", ret); Sleep(1000); } closesocket(sockClient); WSACleanup(); return 0; }
       我們先開啟服務端程序1, 然后運行客戶端程序2, 然后不要動服務端和客戶端, 靜靜等待, 等20s后, 發現程序2的結果是:

ret is 0
ret is ⑴
ret is ⑴
ret is ⑴
ret is ⑴

...........

       可以看到, 20s后, select函數超時, 返回0. 為何呢? 由于select函數檢測到sockClient對應的內核緩沖區沒有數據可讀, 以超時情勢返回。


       好, 我們重新啟動程序1對應的服務端, 然后重新啟動程序2對應的客戶端, 此時(不用等20s), 我們在服務端上按1下Enter鍵, 向客戶端發送"hello"(包括最后的'

主站蜘蛛池模板: 免费国产视频 | 久久久免费精品视频 | 福利视频一二三在线视频免费观看 | 欧美极品少妇xxxxⅹ喷水 | 99青草| 超碰在线网站 | 久久九九久久九九 | 一区二区精 | 97视频在线播放 | 午夜视频网 | 欧美日韩国产色综合视频 | 亚洲午夜久久久 | h视频网| 精品日产卡一卡二卡麻豆 | 久久久久一区二区 | av大片| 三级网站 | 久久不射网站 | 一区二区三区视频 | 在线观看免费av网 | 免费亚洲视频 | 婷婷成人基地 | 日韩午夜精品视频 | 国产一区精品 | 裸体在线国模精品偷拍 | 一级肉体全黄裸片 | 精品国产一区二区三区麻豆小说 | 毛片毛片毛片 | 99精品视频免费在线观看 | 99精品国产免费久久 | 国产高清免费视频 | 国产精品久久久久久久午夜 | 在线国产精品视频 | 欧美不卡在线 | 欧美在线观看一区 | 亚洲免费激情 | 国产午夜精品一区二区三区欧美 | 国产精品九九九 | 久久精品免费观看 | 国产超碰人人做人人爽aⅴ 亚州国产 | 成年人免费视频观看 |