最近在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會話,那麼程式會出現 無法方位已釋放的物件 是由於客戶端的原因導致伺服器和...