【问题标题】:TcpListener - No connection could be made because the target machine actively refused itTcpListener - 无法建立连接,因为目标机器主动拒绝它
【发布时间】:2015-08-23 21:10:25
【问题描述】:
        int port = 44344;

        var thread = new Thread(
            () =>
            {
                TcpListener listener = null;
                try
                {
                    listener = new TcpListener(IPAddress.Any, port);
                    listener.Start();

                    while (true)
                    {
                        var client = listener.AcceptTcpClient();
                    }
                }
                catch (ThreadInterruptedException)
                { }

                if (listener != null)
                    listener.Stop();
            });
        thread.Start();

        Thread.Sleep(TimeSpan.FromSeconds(1));

        var socket = new Socket(SocketType.Stream, ProtocolType.IP);
        socket.Connect("localhost", port);

在我的 PC 上运行时,此代码在最后一行出现“无法建立连接,因为目标计算机主动拒绝它”异常。任何想法可能是什么原因以及如何解决它?

【问题讨论】:

  • 也许您在线程有机会运行之前调用了 Connect。通过在调用 connect 之前添加 Thread.Sleep 进行测试。
  • @Eser,很遗憾没有。它没有改变任何东西。
  • 通过使用ProtocolType.Tcp?
  • @Eser,没有成功。也是。
  • 那个代码是真正的代码吗?将其粘贴到 LINQPad 中即可。是否有防火墙阻止本地主机到本地主机的流量?!

标签: c# .net sockets


【解决方案1】:

解决方案是使用指定的 AddressFamily 参数创建客户端套接字:

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2023-03-25
    • 2015-04-05
    • 2016-12-08
    • 2014-09-05
    • 2017-06-01
    • 2016-08-10
    • 2021-07-15
    相关资源
    最近更新 更多