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...