首页 文章

IPAddress.Any失败

提问于
浏览
2

) . 今天我用TcpListener遇到了一些问题 . 事情很奇怪 . 最初,我使用了新的TcpListener(port)构造函数,但是它已被标记为已过时 . 所以我放弃了它并使用了它:

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小时前,IPAddress.Any返回192.168.1.102,这是我正确的本地IP . 这是 the same IP在ipAddress中!但是使用ipAddress它不起作用,而使用IPAddress.Any它工作(即,它成功接受来自我的客户端的连接) .

  • 现在:IPAddress.Any返回0.0.0.0( !? ),同时继续为ipAddress变量分配正确的IP(192.168.1.102) . 结果?如果使用ipAddres,我的客户端仍然无法连接,但使用IPAddress.Any时仍然无法连接 connects ,即使它是0.0.0.0 .

我对这完全感到困惑......有什么想法吗?

我目前在Form_HandleCreated中有这个,但是当我在Form的构造函数中使用它时它表现得很奇怪 .

后期编辑:我认为我错了IPAddress.Any返回192.168.1.102 . 我可能打印出别的东西,因为很多人都指出0.0.0.0是什么.Any应该返回 . 对不起:: - D.

3 回答

  • 1

    IPAddress.Any应该返回0.0.0.0,这是正常的 . 你真的确定它最初会返回其他东西吗?

    至于你以前无法连接的原因,如果你正在侦听192.168.1.102,并尝试连接到127.0.0.1(localhost),那么它将无法工作 . 如果要连接到该IP地址,则需要侦听127.0.0.1 .

    实质上,您必须侦听您尝试连接的IP地址 . 收听0.0.0.0表示“侦听所有可用的IP地址” . 请记住,127.0.0.1(localhost)不是“my local network IP”的同义词 .

  • 4

    0.0.0.0 是空白IP地址,意思是"I don't care which IP you would use" - 即表示您想要监听所有接口 . 记录它应该返回它 .

    To later edit: 首先不要叫 [0] . 您的主机名可能没有任何相关记录 . 即使你这样做了a)也不知道它们在哪里(即它可能只有127.0.0.1,即环回) .

    单声道这样的代码工作(用netstat等检查):

    using System;
    using System.Net;
    using System.Net.Sockets;
    
    public class test {
        public static void Main(String[] args) {
            IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
            IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8888);
            TcpListener tcpServer = new TcpListener(ipLocalEndPoint);
            tcpServer.Start(); // Without this line there is exception
            var _TCPClient = tcpServer.AcceptTcpClient();
        }
    }
    
  • 8

相关问题