2011-07-01 14 views
1

我有什麼:解除綁定套接字連接C#/ Python的

  • 我有C#編寫的雙插槽的客戶端程序。
  • 我有一個套接字服務器程序(不是我寫的,但它的工作原理)在Python中。

問題:

第一個C#套接字客戶端我所寫的作品很好,可以與蟒蛇服務器的客戶端通信。我可以發送數據沒有問題。但是我想重寫代碼以使其更加面向對象,所以我做了第二個程序,它與第一個程序完全相同。

的問題是第二個將無法連接,這樣說:

System.Net.Sockets.SocketException:試圖通過其訪問權限來訪問一個插座被禁止的方式。

我使用了這個,我已經認識到第一個連接的連接並沒有完全解除綁定。

當我做了一個netstat -a,我實際上看到了連接,並在最後說了TIME_WAIT。

問題是,我該如何取消綁定?它在C#/客戶端嗎?

僅供參考我已經嘗試關閉/斷開/關閉套接字,並沒有工作。我也加入這個命令

connection.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 

在套接字連接的實例化,但也沒有工作。

我需要在服務器端做些什麼來解除連接嗎?

+0

您的客戶端程序不應該綁定到特定的端口 - 您確定不會讓客戶端與服務器混淆嗎? –

回答

0

我知道你說過你已經致電關閉或斷開連接。

但是你是否重新初始化套接字變量。

如:連接=新System.Net.Sockets.Socket(...

如果您使用的是.NET的是舊版本,你也可以有通話後調用Dispose()關閉()

如:

connection.Close(); 
connection.Dispose(); 
connection = new System.Net.Sockets.Socket(... 

一定要始終與try語句內插座工作的任何電話發送和接收數據或關閉套接字可能會導致它的錯誤在哪一個階段,你應該記錄錯誤和呼叫關閉(),然後如果適用,在套接字實例上處理()以清除th電子資源。完成此操作後,可以重新初始化套接字的新實例以嘗試與服務器建立新連接。