none
非同步伺服器通訊端例外狀況"遠端主機已強制關閉一個現存的連線。" RRS feed

  • 問題

  • 我在VB.NET 2005使用了MSDN中非同步伺服器

    通訊端的範例程式時碰的了些狀況

    當客戶端傳送訊息來後 在伺服器端尚未回傳訊息前斷線時

    會出現"遠端主機已強制關閉一個現存的連線。"的例外狀況

    Public Shared Sub ReadCallback(ByVal ar As IAsyncResult)

    Dim bytesRead As Integer = handler.EndReceive(ar)  <--這邊出現例外!!

    如果略過這個例外的話 程式是不會當 可是就無法接收任何

    客戶端傳來的資料了   請問我該怎麼做 才能避免當客戶端斷

    線時   程式還能繼續正常運作呢??

     

     

     

    2006年4月29日 上午 03:22

解答

  • 也許是我會錯意?

    客戶端斷線後,應該處理的是把 socket 關閉,釋放掉這個 socket 所佔據的網路資源,不能只是略過而已。

    一般來說,Server 在接受連線時,不要從 Listen 的 port 去接受,否則你只有一個 client 端可以連進來,若是你沒把 socket 關閉,當然後面的就通通連不進來了。

    2006年4月30日 上午 03:36
    版主

所有回覆

  • 也許是我會錯意?

    客戶端斷線後,應該處理的是把 socket 關閉,釋放掉這個 socket 所佔據的網路資源,不能只是略過而已。

    一般來說,Server 在接受連線時,不要從 Listen 的 port 去接受,否則你只有一個 client 端可以連進來,若是你沒把 socket 關閉,當然後面的就通通連不進來了。

    2006年4月30日 上午 03:36
    版主
  • 謝謝璉大

    我在碰到例外狀況時加了這兩句後

    handler.Shutdown(SocketShutdown.Both)
    handler.Close()

    就可以了~~~

    2006年4月30日 上午 05:34