socket 科普文章

2021-06-09 20:41:44 字數 2002 閱讀 1339

linux:c/socket多路復用select 小全

submitted byelferon 2006, august 3, 5:46 pm.unix/linux

linux系統網路伺服器模型主要有兩種:併發伺服器和迴圈伺服器。所謂併發伺服器就是在同乙個時刻可以處理來自多個客戶端的請求;迴圈伺服器是指伺服器在同一時刻指可以響應乙個客戶端的請求。而且對於tcp和udp套接字,這兩種伺服器的實現方式也有不同的特點。

1、tcp迴圈伺服器:首先tcp伺服器接受乙個客戶端的連線請求,處理連線請求,在完成這個客戶端的所有請求後斷開連線,然後再接受下乙個客戶端的請求。

建立tcp迴圈伺服器的演算法如下:

socket(……);   //建立乙個tcp套接字

bind(……);      //邦定公認的埠號

listen(……);  //傾聽客戶端連線

while(1)          //開始迴圈接收客戶端連線

close(……);   //關閉當前客戶端的連線,準備接收下乙個客戶端連線

}tcp迴圈伺服器一次只處理乙個客戶端的請求,如果有乙個客戶端占用伺服器不放時,其它的客戶機連線請求都得不到及時的響應。因此,tcp伺服器一般很少用迴圈伺服器模型的。

2、tcp併發伺服器:併發伺服器的思想是每乙個客戶端的請求並不由伺服器的主程序直接處理,而是伺服器主程序建立乙個子程序來處理。

建立tcp併發伺服器的演算法如下:

socket(……); //建立乙個tcp套接字

bind(……);    //邦定公認的埠號

listen(……);//傾聽客戶端連線

while(1)       //開始迴圈接收客戶端的接收

close(……);  //關閉子程序處理的客戶端連線

exit(……) ;//終止該子程序

}close(……);           //父程序關閉連線套接字描述符,準備接收下乙個客戶端連線

}tcp併發伺服器可以解決tcp迴圈伺服器客戶端獨佔伺服器的情況。但同時也帶來了乙個不小的問題,即響應客戶機的請求,伺服器要建立子程序來處理,而建立子程序是一種非常消耗資源的操作。

3、udp迴圈伺服器:udp伺服器每次從套接字上讀取乙個客戶端的資料報請求,處理接收到的udp資料報,然後將結果返回給客戶機。

建立udp迴圈伺服器的演算法如下:

socket(……);  //建立乙個資料報型別的套接字

bind(……);     //邦定公認的短口號

while(1)        //開始接收客戶端的連線

因為udp是非面向連線的,沒有乙個客戶端可以獨佔伺服器。只要處理過程不是死迴圈,伺服器對於每乙個客戶機的請求總是能夠處理的。

udp迴圈伺服器在資料報流量過大時由於處理任務繁重可能造成客戶技資料報丟失,但是因為udp協議本身不保證資料報可靠到達,所以udp協議是尤許丟失資料報的。

鑑於以上兩點,一般的udp伺服器採用迴圈方式

4、udp併發伺服器

把併發的概念應用udp就得到了併發udp伺服器,和併發tcp伺服器模型一樣是建立子程序來處理的。

建立udp併發伺服器的演算法如下:

socket(……);  //建立乙個資料報型別的套接字

bind(……);     //邦定公認的短口號

while(1)        //開始接收客戶端的連線

}除非伺服器在處理客戶端的請求所用的時間比較長以外,人們實際上很少用這種udp併發伺服器模型的。

5、多路復用i/o併發伺服器:建立子程序會帶來系統資源的大量消耗,為了解決這個問題,採用多路復用i/o模型的併發伺服器。採用select函式建立多路復用i/o模型的併發伺服器的演算法如下:

初始化(socket,bind,listen);

while(1)

否則說明是乙個已經連線過的描述符

}多路復用i/o可以解決資源限制問題,此模型實際上是將udp迴圈模型用在了tcp上面。這也會帶了一些問題,如由於伺服器依次處理客戶的請求,所以可能導致友的客戶會等待很久。

winsock i/o系列1:多路復用i/o支援多client的實現及效率討論

幾篇不錯的socket文章

proxy源 分析 談談如何學習linux網路程式設計 2001 08 10 12 00 00 linux網路程式設計 10.原始套接字 11.後記 2001 05 08 11 26 09 linux網路程式設計 9.伺服器模型 2001 05 08 11 23 59 linux網路程式設計 8.套...

文章索引 Socket 網路程式設計資料收集

windows socket和linux socket程式設計的區別 vc檢視某ip是否可以ping通 vc獲取本機ip位址列表 ip位址和整數轉換 區域網內mac位址衝突導致裝置網路出現異常狀況 scoket 多執行緒範例 tcp udp server client vc驛站 windows ap...

文章索引 Socket程式設計 V2

文章索引 socket 網路程式設計資料收集 v1 如何設定connect超時時間 windows 如何設定connect超時時間 linux socket程式設計中檢測埠是否被占用 注意 tcp的埠和udp的埠是互不相干的。同一埠如何區分不同的socket 注意 accept產生的socket共用...