- 1、經典錯誤之 無法訪問已釋放的物件。 物件名:“System.Net.Sockets.Socket”
- (1)、問題現場
(2)、問題敘述
程式中的某個地方呼叫到了socket.close後,這個socket還被呼叫,就出爆出上面錯誤!
(3)、解決方案
使用下面一句:
if (stsend != null && stsend.Connected)stsend != null :這一句在socket.close之後,會無效的,因為關閉socket連線時已經將其所有連線的資源都釋放了;故要與Connected全用;
stsend.Connected:獲取一個值,該值指示 Socket上次操作是Send還是Receive形式連線到遠端主機,如果都不是,那就是斷開了。
擴充套件說明:
所有非託管資源程式設計師必須能控制資源釋放,諸如資料庫連線,SOCKET連線等在使用後都應當顯示關閉,如果是長連線,在程式退出時應當確保所有佔用的連線都被關閉。
2、經典錯誤之 "遠端主機強迫關閉了一個現有的連線。"
(1)問題現場
(2)、問題敘述
如下圖,對於網路的經典問題,由於是server和client中的任意一方主動斷開連線,導致彈出 “遠端主機強迫關閉了一個現在連線”的異常。這種情況,會導致程式提示異常,無法繼續往下執行。
(3)、解決方案
可以通過異常處理的方式,通過異常來提示網路不正常,從而跳出該程式分支,不至於因為異常問題程式癱瘓!
如下圖,一Catch到這類System.Net.Sockets.SocketException異常(當然這裡把它設為Exceptioin異常,抓取的範圍更廣),那麼就用MessageBox給使用者一個提示,然後從該分支退出就行了。
本篇文章引自:http://blog.chinaunix.net/uid-25498312-id-3321852.html