2015-01-20 50 views
2

我正在用winforms在Windows 8上製作一個簡單的服務器/客戶端應用程序。該程序工作正常,直到我使用我的外部IP地址50.140.66.104我得到的錯誤。TcpListener IPAdress.Parse錯誤

型「System.Net.Sockets.SocketException」未處理的異常發生在System.dll中 其他信息:請求的地址不在其上下文中有效

我使用下面的代碼:

TcpListener listener = new TcpListener(IPAddress.Parse("50.149.66.104"), 8000); 

爲什麼這個IP地址是個問題? 在此先感謝!

+2

你爲什麼不給監聽者使用'IPAddress.Any'?指定IP地址只會允許來自該IP地址的傳入連接。 – itsme86 2015-01-20 22:24:59

+0

我做到了,它的工作原理。但我知道這會使它不那麼安全。你知道我該如何反擊? – Nullone 2015-01-20 23:01:08

回答

4

我懷疑IP地址50.149.66.104是您的面向Internet的地址。唯一可以合法綁定到PC上的IP地址是分配給該PC上適配器的地址。您不能綁定到其他人的地址(例如您的路由器的Internet地址)。

至於安全性,這裏應該沒有真正的關注。 IPAddress.Any所做的只是允許套接字偵聽PC上存在的所有適配器。如果出於某種原因想要阻止一個或多個適配器上的服務器入站訪問,則可以使用防火牆(Windows的內置或第三方)來阻止特定適配器上的連接。

請注意,Windows還將爲特定網絡維護單獨的策略。甚至可以配置相同的適配器以允許僅入站連接當適配器連接到已知安全的網絡時,與「公共」網絡連接。

如果您確實想將服務器級別的套接字綁定到計算機中的特定網絡適配器,您需要找到適配器已設置的IP地址並綁定到該地址。不是你的公共IP地址。

+0

太好了,謝謝你的幫忙! – Nullone 2015-01-21 23:37:07