- 1、經(jīng)典錯(cuò)誤之 無(wú)法訪(fǎng)問(wèn)已釋放的對(duì)象。 對(duì)象名:“System.Net.Sockets.Socket”
-
- (1)、問(wèn)題現(xiàn)場(chǎng)
25498312_1345603435D89G.png)
(2)、問(wèn)題敘述
程序中的某個(gè)地方調(diào)用到了socket.close后,這個(gè)socket還被調(diào)用,就出爆出上面錯(cuò)誤!
(3)、解決方案
使用下面一句:
if (stsend != null && stsend.Connected)
stsend != null :這一句在socket.close之后,會(huì)無(wú)效的,因?yàn)殛P(guān)閉socket連接時(shí)已經(jīng)將其所有連接的資源都釋放了;故要與Connected全用;
stsend.Connected:獲取一個(gè)值,該值指示 Socket上次操作是Send還是Receive形式連接到遠(yuǎn)程主機(jī),如果都不是,那就是斷開(kāi)了。
擴(kuò)展說(shuō)明:
所有非托管資源程序員必須能控制資源釋放,諸如數(shù)據(jù)庫(kù)連接,SOCKET連接等在使用后都應(yīng)當(dāng)顯示關(guān)閉,如果是長(zhǎng)連接,在程序退出時(shí)應(yīng)當(dāng)確保所有占用的連接都被關(guān)閉。
2、經(jīng)典錯(cuò)誤之 "遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個(gè)現(xiàn)有的連接。"
(1)問(wèn)題現(xiàn)場(chǎng)
25498312_1345603450297w.png)
(2)、問(wèn)題敘述
如下圖,對(duì)于網(wǎng)絡(luò)的經(jīng)典問(wèn)題,由于是server和client中的任意一方主動(dòng)斷開(kāi)連接,導(dǎo)致彈出 “遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個(gè)現(xiàn)在連接”的異常。這種情況,會(huì)導(dǎo)致程序提示異常,無(wú)法繼續(xù)往下執(zhí)行。
(3)、解決方案
可以通過(guò)異常處理的方式,通過(guò)異常來(lái)提示網(wǎng)絡(luò)不正常,從而跳出該程序分支,不至于因?yàn)楫惓?wèn)題程序癱瘓!
如下圖,一Catch到這類(lèi)System.Net.Sockets.SocketException異常(當(dāng)然這里把它設(shè)為Exceptioin異常,抓取的范圍更廣),那么就用MessageBox給用戶(hù)一個(gè)提示,然后從該分支退出就行了。