2

我正在按照教程@ http://www.geekpedia.com/tutorial239_Csharp-Chat-Part-1---Building-the-Chat-Client.html尝试收集网络基础知识。对于那些不想跳的人来说,这是一个快速的 tut 演示如何编写一个简单的客户端-服务器-模型聊天应用程序。

当我尝试运行 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;

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

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

谢谢,山姆

4

3 回答 3

1

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

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

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

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

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

于 2009-09-10T02:20:53.970 回答
0

您是否有人使用您的外部(互联网)IP 地址?(在此处查看您的。)
您是否对路由器进行了针孔以将所有通信从端口 21719 转发到您的服务器?

于 2009-09-05T23:12:30.810 回答
0

一些技巧:

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