09計應一班 閆俊霖
/* server.c */
#include
#include
#include
#include
#include "wrap.h"
#define maxline 80
#define serv_port 8000
int main(int argc, char **argv)
if (i == fd_setsize)
fd_set(connfd, &allset); /* add new descriptor to set 向allset中新增與伺服器建立連線並有資料請求的客戶端埠*/
if (connfd > maxfd) /*若此時建立並有資料請求的客戶端已大於原來的套接字描述符最大值,則將connfd賦值給maxfd*/
maxfd = connfd; /* for select */
if (i > maxi) /*把maxi賦值為當前最大的放置建立連線並有資料請求客戶端描述符的索引,以在下面的for迴圈語句中作為處理客戶端請求個數的上限;*/
maxi = i; /* max index in client array */
if (--nready == 0) /*若--nready為0,則表示當前的套接字描述符集中只有listenfd這個監聽的描述符,沒有客戶端的資料請求埠,進行下一輪的select迴圈;*/
continue; /* no more readable descriptors */
}
for (i = 0; i <= maxi; i++) else
if (--nready == 0) /*判斷--nready,若--nready為0,則表示當前的套接字描述符集中只有listenfd這個監聽的描述符,沒有客戶端的資料請求埠,進行下一輪的select迴圈;*/
break; /* no more readable descriptors */
}
}
}
}
/*
執行:select是網路程式中很常用的乙個系統呼叫,它可以同時監聽多個阻塞的檔案描述符。
1.伺服器監聽客戶端的請求,將這些請求都放在乙個佇列中
2.當這些被阻塞的埠有資料請求或要與伺服器互動時,select就會返回請求客戶端的個數給nready,若沒有,則返回0,若select呼叫出錯,則會返回乙個負值。由於最後乙個關於時間的引數值是null,所以select會一直阻塞等待著client的請求,直到有資料互動的客戶端產生。
3.當只有listenfd時,沒有資料到達的時,則一直監聽
4.當rset中有listenfd ,並有connfd時客戶端與伺服器連線從中讀取資料並轉換發回客戶端
*/
0 給主人留下些什麼吧!~~
閆氏DP分析法
閆氏dp分析法 核心 從集合角度分析dp問題 1.狀態表示 f i 2.狀態計算,化整為零的過程 例題1,01揹包問題 有n件物品和乙個容量式v的揹包,每件物品只能使用一次 第i件物品的體積式vi,價值是wi 求將這些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大 dp狀態表示 f ...
閆式DP分析法
學好dp的乙個關鍵點在於刷遍所有型別的dp題目 閆式dp分析法的核心思想是從集合的角度來分析dp問題。所有的dp問題都可以使用閆式dp分析法進行分析。經過70道題目驗證通過?我們可以把做過的所有dp問題都看作是有限集上的最值問題。dp問題 有限集上的最值問題 然而,由於這個有限集的數量級很高 通常是...
Select函式分析
main select等待3秒,3秒輪詢,要非阻塞就置0 char buffer 256 256位元組的接收緩衝區 假定已經建立udp連線,具體過程不寫,簡單,當然tcp也同理,主機ip和port都已經給定,要寫的檔案已經開啟 sock socket bind fp fopen while 1 en...