)。我今天用TcpListener进入了一些问题。事情很奇怪。最初,我使用了新的TcpListener(port)构造函数,但它已被标记为过时。所以我放弃了它,并用这个来代替:IPAddress.Any Fail
IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, ServerPort);
TcpListener tcpServer = new TcpListener(ipLocalEndPoint);
_TCPClient = tcpServer.AcceptTcpClient();
GotClient();
我这样做,在一个线程,当然,这样才不会锁定应用程序。现在,发生的情况是,即使ipAddress正确,服务器也不会接受任何传入连接。
但是,更改为新的IPEndPoint(IPAddress.Any,ServerPort)似乎有伎俩!这在2种方式中很愚蠢:
2小时前,IPAddress.Any返回192.168.1.102这是我的正确本地IP。这是相同的IP地址 IPAddress!但是使用ipAddress它不起作用,而使用IPAddress.Any它工作(也就是说,它成功地接受了来自我的客户端的连接)。
当前:IPAddress.Any返回0.0.0.0(!?),而ipAddress变量继续分配给我正确的IP(192.168.1.102)。结果?如果使用ipAddres,我的客户端不能连接,但当使用IPAddress.Any时,连接,即使它是0.0.0.0。
我完全被这个困惑......任何想法?
我目前在Form_HandleCreated中有这个,但当我在Form的构造函数中使用它时,它的行为也很奇怪。
后来编辑:我想我错了IPAddress.Any返回192.168.1.102。我可能会印出其他的东西,因为你们许多人都表示0.0.0.0是什么。任何应该返回。对不起:: - D.
嗨,感谢您的回答:: - D.是的,我想我犯了一个错误。任何和打印在控制台ipAddress代替。 无论如何,我试图从Device Emulator(从.Net CF应用程序)连接到192.168.1.102。所以我没有尝试127.0.0.1。尽管......想到了这个想法......如果模拟器本身能够通过它呢?虽然在.Net Compact Framework的套接字中我特别要求192.168.1.102。 – Axonn 2010-08-06 16:51:33
如果你试图从模拟器连接到主机,我不知道IP地址是什么样的......可能有一些NAT,我不能说。 – Mark 2010-08-06 16:55:06
另外,它让我想知道是否已经在仿真器和主机之间建立了网络连接。我似乎记得模拟器中有多种选项用于网络工作。另外,请确认您的防火墙设置,它可能会被阻止,具体取决于您设置的方式。 – Mark 2010-08-06 16:56:56