C#socket通訊兩個最經典錯誤解決方案

來源:互聯網
上載者:User

標籤:

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

C#socket通訊兩個最經典錯誤解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.