[英]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?
如果这不是问题,那么这里有一些通用建议:
获取一份netcat。 这是一个小型的网络测试工具,其唯一的工作就是形成一个简单的TCP连接。 这样一来,您就可以消除代码中所有变量。 如果netcat 可以形成连接,那么您知道问题出在您的代码。 如果没有,您已经确认它是您的路由器。
您可以使用WireShark(或TShark)查找ICMP数据包。 在远程计算机上捕获ICMP数据包。 如果从路由器收到“无法到达目的地”,则再次证明它是您的路由器。
正如Spencer所说,您需要确保在路由器上设置了端口转发,才能将端口21719上收到的所有数据包转发到内部计算机。 至于确切的操作方法,在不知道哪种路由器的情况下很难说。
您是否有人在使用您的外部(互联网)IP地址? ( 在这里查看您的。)
您是否对路由器进行了设置,以将所有通信从端口21719转发到服务器?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.