簡體   English   中英

客戶端無法通過Internet連接到服務器

[英]Client does not connect to server over internet

我已經建立了一個簡單的客戶端/服務器系統,但是由於某種原因,客戶端無法通過Internet連接。 我讓他們使用本地主機地址(127.0.0.1)和我的LAN IP地址(192.168.2.2)在同一台計算機上進行通信。

我還確認使用http://www.whatsmyip.org/ports/來打開該端口,並且當我使用此站點時,在服務器上觸發了回調函數,因此我認為服務器可以正常工作。

但是,當我嘗試從客戶端連接到相同的(互聯網)IP地址/端口時,服務器未檢測到任何內容,並且客戶端在OnConnect回調中引發異常。 我注意到BeginConnect語句未正確設置clientSocket的RemoteEndPoint屬性-當我查看它時,它拋出SocketException(10057)。 (通過LAN地址連接時,它可以正常工作。)

private void ConnectToServer()
{
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPAddress ipAddress = IPAddress.Parse(txtIPAddress.Text);

    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Convert.ToInt32(txtPort.Text));
    clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);
}

考慮到客戶端可以通過LAN IP地址連接並且服務器正在接受Internet上的連接,該如何阻止客戶端通過外部IP地址連接到服務器?

我正在使用Windows 7和.NET 3.0。

任何建議表示感謝。 謝謝。

首先,您不應該期望在調用BeginConnect之后立即連接套接字。 通常需要幾次往返來建立連接。 因此,在建立連接之前詢問遠程端點時,將出現錯誤代碼10057 Not Connected

至於為什么您的網絡設置不起作用。 如果我正確理解您的設置,則您嘗試通過以下方式發送數據包:

Your machine (LAN) --> Port-forwarding device (WAN) --> Your machine (LAN)

您是否已驗證端口轉發設備支持此設置?

您聲明已驗證以下內容:

Remote machine (WAN) --> Port-forwarding device (WAN) --> Your machine (LAN)

您的端口轉發設備可能不支持LAN -> WAN -> LAN端口轉發。

您可能還想使用Wireshark查看發送了什么數據包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM