客户端 - 服务器IM应用程序中的外部IP服务器没有响应

时间:2009-09-05 23:08:35

标签: c# networking client-server instant-messaging

我正在按照教程@ 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;

会导致某些配置出现问题,我开始担心我的配置可能会包含在其中。

那么,有没有人对我有任何解决方案?

谢谢, 萨姆

3 个答案:

答案 0 :(得分:1)

您使用的本地IP地址是什么? (ipAddress)如果它是127.0.0.1,那是不正确的(我不知道它在内部如何工作,但Windows似乎不时使用魔法)。此外,如果本地计算机中有多个NIC,可能端口转发仅设置为转发到其中一个,而您正在使用另一个的IP?

如果这不是问题,这里有一些通用的建议:

  1. 抓取netcat的副本。它是一个小型网络测试工具,其唯一的工作就是形成一个简单的TCP连接。这将允许您在所有这些中将代码作为变量消除。如果netcat 可以形成连接,那么您就知道问题是您的代码。如果没有,你已经确认它是你的路由器。

  2. 您可以使用WireShark(或TShark)查找ICMP数据包。在远程计算机上捕获ICMP数据包。如果您从路由器获得“目的地无法访问”,您再次证明它是您的路由器。

  3. 正如Spencer所说,您需要确保在路由器上设置端口转发,以便将端口21719上的所有数据包转发到您的内部计算机。至于如何做到这一点,很难说不知道什么类型的路由器。

答案 1 :(得分:0)

您是否让人们使用您的外部(互联网)IP地址? (见你的here。)
您是否已将您的路由器用于将所有通信从端口21719转发到您的服务器?

答案 2 :(得分:0)

一些提示:

  1. 您使用的是哪种操作系统?请检查防火墙规则的范围和/或配置文件(在“高级”选项卡下)。
  2. 当您的朋友尝试telnet到端口(连接到im服务器)时,使用WiresharkNetwork Monitor监控流量(Wireshark遇到Vista和Win 7问题)。如果您没有看到任何击中机器的问题,则问题可能出在路由器端。仔细检查设置 - 你说你设置了转发规则(NAT),但它是否也设置了路由器的防火墙规则?