狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# Socket連接 無法訪問已釋放的對象

admin
2017年4月12日 1:7 本文熱度 6000

在進行Socket長連接時,若服務器或客戶端出現異常時,另外一端對Socket對話進行操作時,程序會出現無法訪問已釋放的對象的問題。例如客戶端出現問題主動斷開Socket時,當服務器操作Socket時,比如主動斷開Socket會話,那么程序會出現“無法方位已釋放的對象”,是由于客戶端的原因導致服務器和客戶端的Socket已經不存在或連接已經斷開,即Socket已經釋放,服務器再操作服務器和客戶端的Socket肯定會報錯,因此在服務器或客戶端一側操作Socket時,必須首先判斷Socket是否存在、連接是否正常,只有存在且連接正常的Socket才允許操作。以服務器斷開Socket為例:

                //判斷Socket是否存在且連接正常,存在且連接正常的Socket才運行進行斷開操作 

                if (_cliSock != null && _cliSock.Connected)
                {

                    //關閉Socket之前,首選需要把雙方的Socket Shutdown掉
                    _cliSock.Shutdown(SocketShutdown.Both);

                    //Shutdown掉Socket后主線程停止10ms,保證Socket的Shutdown完成
                    System.Threading.Thread.Sleep(10);

                    //關閉客戶端Socket,清理資源
                    _cliSock.Close();

                }

  注:Socket對話就相當于兩個國家(A和C)通過貿易渠道進行稀土交易,正常情況下,A、C國家正常支持該貿易,貿易可以正常進行,若C國家法律禁止稀土出口,主動關閉了該貿易通道,但是A國家并不知道,那么A國家發往C國的所有貿易請求將會被丟失,對貿易通道所有的維護都將失敗,所以需要在C國執行法律時(即Close())之前,需要關閉雙方的貿易通道(即 SocketShutdown.Both),然后等待最后一批在貿易通道的貨物成功運送至A國(即主線層休眠10ms),再執行法律,真正關閉Socket連接。


該文章在 2017/4/12 1:07:30 編輯過

全部評論1

admin
2017年4月12日 1:8
C# 建立一個同步的socket連接,當服務器端意外歇菜或者正常關閉時,客戶端如何能檢測到 ?
寫個線程 
void process()
{
while(true)
{Thread.Sleep(200);
if(!socket.Connected)
{
messagebox.show("已經與服務器斷開");
}

}

}

該評論在 2017/4/12 1:08:09 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved