socket實現多個客戶端連線在乙個伺服器上

2021-08-30 10:50:32 字數 877 閱讀 5078

1、使用socekt通訊一般步驟

1)伺服器端:socker()建立套接字,繫結(bind)並監聽(listen),用accept()等待客戶端連線。

2)客戶端:socker()建立套接字,連線(connect)伺服器,連線上後使用send()和recv(),在套接字上寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

3)伺服器端:accept()發現有客戶端連線,建立乙個新的套接字,自身重新開始等待連線。該新產生的套接字使用send()和recv()寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

2、多個客戶端同時連線在乙個伺服器上

這時候伺服器端應該使用多執行緒,每連線上乙個客戶端就給該客戶端開啟乙個執行緒。監聽埠的時候也要單獨開乙個執行緒、不然會阻塞主線程。這樣做有乙個明顯的缺點,就是有n個客戶端請求連線時,就會有n個執行緒,對程式的效能和計算機的效能影響很大,可以使用執行緒池進行管理。

使用執行緒池的好處:主要用於減少因頻繁建立和銷毀執行緒帶來開銷,因此那些經常使用且執行時間短的執行緒需要用執行緒池來管理。

3、c#版**如下

伺服器端**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.net;

using system.net.sockets;

using system.threading;

using system.io;

namespace sockserver

}catch

finally}}

class work}}

客戶端**:

socket模型處理多個客戶端

最近學完了簡單的socket程式設計,發現其實socket的網路程式設計其實並沒有什麼難度,只是簡單的函式呼叫,記住客戶端與服務端的步驟,寫起來基本沒有什麼問題。在伺服器程式的設計中,乙個伺服器不可能只相應乙個客戶端的鏈結,為了響應多個客戶端的鏈結,需要使用多執行緒的方式,每當有乙個客戶端連線進來,...

Socket實現HTTP客戶端

前些日子用 wininet做專案。功能忒強大了。但總覺得管理cookie有點不方便。即使設定了自己手動管理cookies。這天上掉餡餅的事還真的常常發生。比如你之前用瀏覽器訪問了這個站,留下了cookie 你再用wininet訪問的時候,這個餡餅就出現了。封包不難 連線後。將 headers一股腦堆...

C 實現客戶端Socket斷開後重新連線。

思路 使用system.threading.timer類每秒檢測一次是否連線,如果沒有處於連線狀態,則嘗試連線一次,如果連線失敗,則將異常資訊捕捉,並記錄日誌,然後sleep2秒,再嘗試連線,一直重複連線的步驟。system.threading.timer timer null private vo...