簡體   English   中英

客戶端服務器IM應用中的外部IP上的服務器無響應

[英]No response from sever on external IP in client-server IM app

我正在關注一個教程@ http://www.geekpedia.com/tutorial239_Csharp-Chat-Part-1---Building-the-Chat-Client.html,以嘗試收集網絡基礎知識。 對於不希望跳高的人,這是一個快速入門,展示了如何編寫簡單的客戶端-服務器-模型聊天應用程序。

當我嘗試在tut中運行代碼時,只要客戶端和服務器都在同一個網絡上,它就可以正常工作,但是第二個嘗試在外部進行(讓伙伴運行客戶端應用程序,然后運行服務器應用程序(我這邊)),一切都到鍋里了。 代碼在同一網絡中時可以工作的事實使我相信,這不是編碼問題,而是網絡設置方式的問題。

我正在嘗試在我已打開的端口21719的IP地址上運行服務器,但仍然其他人無法連​​接到我的服務器,根本無法獲得任何形式的響應。

服務器用來監聽連接的代碼(來自tut)是:

public void StartListening()
        {


            IPAddress ipaLocal = ipAddress; //ipAddress is parsed from txtIP


            tlsClient = new TcpListener(ipaLocal, 21719);


            tlsClient.Start();


            ServRunning = true; //for the running loop

            // Start the new tread that hosts the listener
            thrListener = new Thread(KeepListening);
            thrListener.Start();
        }

現在,該教程實際上確實指出IPAddress ipaLocal = ipAddress;

在某些配置上會引起問題,我開始擔心我的配置可能會包含在其中。

那么,有人對我有解決方案嗎?

謝謝山姆

您正在使用的本地IP地址是什么? (ipAddress)如果是127.0.0.1,那是不正確的(我也不知道它在內部如何工作,但是Windows似乎有時會使用魔術)。 另外,如果您的本地計算機中有多個NIC,也許端口轉發僅設置為轉發到其中一個,而您正在使用另一個的IP?

如果這不是問題,那么這里有一些通用建議:

  1. 獲取一份netcat。 這是一個小型的網絡測試工具,其唯一的工作就是形成一個簡單的TCP連接。 這樣一來,您就可以消除代碼中所有變量。 如果netcat 可以形成連接,那么您知道問題出在您的代碼。 如果沒有,您已經確認它是您的路由器。

  2. 您可以使用WireShark(或TShark)查找ICMP數據包。 遠程計算機上捕獲ICMP數據包。 如果從路由器收到“無法到達目的地”,則再次證明它是您的路由器。

正如Spencer所說,您需要確保在路由器上設置了端口轉發,才能將端口21719上收到的所有數據包轉發到內部計算機。 至於確切的操作方法,在不知道哪種路由器的情況下很難說。

您是否有人在使用您的外部(互聯網)IP地址? 在這里查看您的。)
您是否對路由器進行了設置,以將所有通信從端口21719轉發到服務器?

一些技巧:

  1. 您正在使用哪種操作系統? 請檢查防火牆規則的范圍和/或配置文件(在“高級”選項卡下)。
  2. 當您的朋友嘗試通過telnet到端口(連接到im服務器)時,可以使用Wireshark網絡監視器來監視流量(Wireshark在Vista和Win 7上存在問題)。 如果看不到任何東西撞到您的機器,則問題可能出在路由器端。 仔細檢查設置-您說您設置了轉發規則(NAT),但是否還在路由器的防火牆上設置了該規則?

暫無
暫無

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

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