如何控制C Socket的連線超時時間

2021-06-19 18:09:10 字數 791 閱讀 2037

最近在socket程式設計的時候發現只能設定send和recieve的timeout時間,而connect方法的timeout是固定的,大概有30-40s,如果用同步方法介面會卡死很長時間

下面介紹兩種通過非同步的方式解決此問題的方法:

1.使用beginconnect方法

iasyncresult connresult = mysocket.beginconnect(youraddress, yourport, null, null);

connresult.asyncwaithandle.waitone(2000, true);  //等待2秒

if (!connresult.iscompleted)

else

這種方法很好的控制了連線超時時間而且**非常簡單,但是介面仍然會有2秒的卡死產生。如果想解決該問題,則需要建立乙個額外的執行緒來執行waitone方法。

2.使用connectasync方法

socketasynceventargs e = new socketasynceventargs();

e.completed += new eventhandler(asyncconnected);

e.remoteendpoint = new ipendpoint(ipaddress.parse(youraddress), yourport);

mysocket.connectasync(e);

這是一種事件觸發的方式,將連線成功後的動作放在completed事件的處理過程中,從而使介面不會卡死。同時也可以建立乙個額外執行緒來監視連線時間,從而達到控制連線超時的目的。

TCP連線時CSocket粘包問題的解決方法

解決tcp網路傳輸 粘包 問題 原文出處 http www.ciw.com.cn 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protoc...

TCP連線時CSocket粘包問題的解決方法

解決tcp網路傳輸 粘包 問題原文出處 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protocol,傳輸控制協議 是面向連線的,提供高可...

C Socket連線 無法訪問已釋放的物件

在進行socket長連線時,若伺服器或客戶端出現異常時,另外一端對socket對話進行操作時,程式會出現無法訪問已釋放的物件的問題。例如客戶端出現問題主動斷開socket時,當伺服器操作socket時,比如主動斷開socket會話,那麼程式會出現 無法方位已釋放的物件 是由於客戶端的原因導致伺服器和...