C Socket連線 無法訪問已釋放的物件

2022-03-08 05:27:54 字數 904 閱讀 3709

在進行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連線。

vmware web access無法訪問

現象 esx的web訪問預設是關閉的,網上很多文章都說使用chkconfig vmware webaccess on來讓服務自動開啟,不過這樣操作之後重啟機器,web訪問還是還會出503無法訪問錯誤,esx不知道為什麼會自動把vmware webaccess 給禁用掉。解決方法 經過無數次嘗試之後發...

IIS無法訪問

一 iis預設 無法啟用 我的是windows xp,今天啟用iis,發現我的預設站點停止了,啟用的時候,提示引用內容在本地計算機無法啟動 world wide web publishing 服務錯誤127 找不到指定的程式.解決方案 是windowsxp kb939373 x86 chs.exe補...

無法訪問127 0 0 1

1 開啟internert資訊管理檢視iis是否啟動,且預設 時候已經開啟 2 開啟 看是否能訪問iis的預設網頁,能訪問則說明iis已經成功安裝到電腦上,可能是無法解析localhost 3 開始 命令 cmd ping localhost,看是否能ping通,從127.0.0.1上返回資訊,如果...