2015-07-03 63 views
4

在我們團隊的桌面之一,運行這段代碼時,我們得到一個奇怪的錯誤:在C#中綁定套接字時獲取無效指針地址?

IPAddress ipaddress = IPAddress.Parse(sIPDaddress); 
var endpoint = new IPEndPoint(ipaddress, m_iPort); 
listener.Bind(endpoint); 
listener.Blocking = true; 
listener.Listen(-1); 

我們正在對bind命令以下10014錯誤:

WSAEFAULT 10014個錯誤地址。系統在嘗試使用呼叫的指針參數時檢測到無效指針 地址。如果應用程序傳遞無效指針值,或者緩衝區的長度太小,則會發生此錯誤 。例如,如果作爲sockaddr結構的參數 的長度小於(sockaddr)的大小 。

我們最初認爲這是一個網絡問題,但我的筆記本電腦運行相同的代碼連接到他的網絡端口時工作。

桌面是ip4啓用,這是唯一的機器,我們有這個問題。我們甚至更換了網卡,但錯誤仍然存​​在。

任何想法在哪裏看?

+0

您試圖綁定的IP地址實際上存在於計算機上?嘗試使用此代碼綁定到回送地址(127.0.0.1),並且仍然收到相同的錯誤消息? – Shar1er80

+1

sIPDaddress的價值是什麼? – CristiFati

+0

所有其他計算機是否具有相同的IP設置?啓用了IPv4並禁用了IPv6? –

回答

0

我發現上面的代碼上方的行:

Socket listener = new Socket(0, SocketType.Stream, ProtocolType.Tcp); 

我切換這對:

Socket listener = new Socket(AddressFamily.InterNetwork, 
           SocketType.Stream, ProtocolType.Tcp); 

和它的工作。

仍然不確定爲什麼這發生在一個開發人員機器上,而不是其他人。

我注意到的是,當我在工作的開發機器上進行ipconfig時,顯示了一個Link-local IPV6地址。但是,在非工作機器上,不存在Link-local IPV6地址的條目。不確定這是否相關。