繁体   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