我正在按照教程@ 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;
会导致某些配置出现问题,我开始担心我的配置可能会包含在其中。
那么,有没有人对我有任何解决方案?
谢谢, 萨姆
答案 0 :(得分:1)
您使用的本地IP地址是什么? (ipAddress)如果它是127.0.0.1,那是不正确的(我不知道它在内部如何工作,但Windows似乎不时使用魔法)。此外,如果本地计算机中有多个NIC,可能端口转发仅设置为转发到其中一个,而您正在使用另一个的IP?
如果这不是问题,这里有一些通用的建议:
抓取netcat的副本。它是一个小型网络测试工具,其唯一的工作就是形成一个简单的TCP连接。这将允许您在所有这些中将代码作为变量消除。如果netcat 可以形成连接,那么您就知道问题是您的代码。如果没有,你已经确认它是你的路由器。
您可以使用WireShark(或TShark)查找ICMP数据包。在远程计算机上捕获ICMP数据包。如果您从路由器获得“目的地无法访问”,您再次证明它是您的路由器。
正如Spencer所说,您需要确保在路由器上设置端口转发,以便将端口21719上的所有数据包转发到您的内部计算机。至于如何做到这一点,很难说不知道什么类型的路由器。
答案 1 :(得分:0)
您是否让人们使用您的外部(互联网)IP地址? (见你的here。)
您是否已将您的路由器用于将所有通信从端口21719转发到您的服务器?
答案 2 :(得分:0)
一些提示: