日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Socket网络编程]一个封锁操作被对 WSACancelBlockingCall 的调用中断。

發布時間:2024/4/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Socket网络编程]一个封锁操作被对 WSACancelBlockingCall 的调用中断。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://www.cnblogs.com/xiwang/archive/2012/10/25/2740114.html記錄在此,方便查閱。

C#中在使用UDPClient循環監聽端口,在斷開UPDClient的時候,使用try...catch捕獲了異常,System.NET.Sockets.SocketException“一個封鎖操作被對 WSACancelBlockingCall 的調用中斷”,ErrorCode=10004。

? ? ? 接收時的代碼如下:

IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, 0);Thread thread = new Thread(() =>{while (!m_StopListen){try{if (m_udpClient.Client == null) return;byte[] bytes = m_udpClient.Receive(ref ipendpoint);string str = Encoding.Default.GetString(bytes);Console.WriteLine(string.Format("接收的數據是: {0},來自IP:{1} ,端口 : {2}", str, ipendpoint.Address.ToString(), ipendpoint.Port));}catch (Exception ex){Console.WriteLine(ex.Message);}Thread.Sleep(100);}});thread.IsBackground = true;thread.Start();

?

? ? ? ?停止監聽的代碼:

this.m_StopListen = true;m_udpClient.Close();m_udpClient = null;

? ? ? ?解決辦法:

??    在開始調用UDPClient的Receive方法之前對UDPClient.Available屬性進行判斷,當Available屬性大于0時才開始從緩沖區讀取網絡數據:

?

try{if (m_udpClient.Available <= 0) continue; if (m_udpClient.Client == null) return;byte[] bytes = m_udpClient.Receive(ref ipendpoint);string str = Encoding.Default.GetString(bytes);Console.WriteLine(string.Format("接收的數據是: {0},來自IP:{1} ,端口 : {2}", str, ipendpoint.Address.ToString(), ipendpoint.Port));}

?

? ? ? ?原因:MSDN對Available的解釋是:

      “Available?屬性用于確定在網絡緩沖區中排隊等待讀取的數據的量。?如果數據可用,可調用?Read?獲取數據。?如果無數據可用,則?Available?屬性返回 0。

    如果遠程主機處于關機狀態或關閉了連接,則?Available?屬性將引發SocketException。如果遠程主機處于關機狀態或關閉了連接,則?Available?屬性將引發SocketException”。

? ? ? ? ? ?也就是說,錯誤的原因在于,但調用Close后,線程恰好繼續向網絡緩沖區中讀取數據,所以引發SocketException。

?????

博客地址:http://www.cnblogs.com/wolf-sun/
博客版權:本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接。
如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起討論,共同進步!
再次感謝您耐心的讀完本篇文章。

轉載:http://www.cnblogs.com/wolf-sun/p/3366353.html

總結

以上是生活随笔為你收集整理的[Socket网络编程]一个封锁操作被对 WSACancelBlockingCall 的调用中断。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。