【问题标题】:Connecting to a TcpListener on a different thread, same process连接到不同线程、相同进程上的 TcpListener
【发布时间】:2011-05-18 04:57:54
【问题描述】:

我正在尝试对一些通信进行单元测试。在 C# 中通过 TCP 编写代码。我创建了一个支持 TcpListener 的快速线程。每次 TcpClient 尝试连接时,我都会收到“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”异常。您不能在同一进程中托管并连接到同一端口吗?

    [Test]
    public void Foo()
    {
        Thread listenerThread = new Thread(TcpListenerThread);

        listenerThread.Start();

        Thread.Sleep(5000);

        TcpClient client = new TcpClient(new IPEndPoint(IPAddress.Loopback, 1234));        
    }

    private void TcpListenerThread()
    {
        TcpListener listener = new TcpListener(IPAddress.Any, 1234);
        listener.Start();
        TcpClient socket = listener.AcceptTcpClient();
        StreamWriter writer = new StreamWriter(socket.GetStream());

        writer.Write(File.ReadAllBytes("../../random file.txt"));

    }

【问题讨论】:

    标签: c# multithreading tcpclient tcplistener


    【解决方案1】:

    您使用了错误的 TcpClient 构造函数 - 这个构造函数将客户端绑定到 本地地址和端口,因此您最终会导致侦听器和客户端都试图获取 127.0.0.1:1234。使用TcpClient( String, int ) 构造函数。

    【讨论】:

    • 或空的 TcpClient ctor 并使用 TcpClient.Connect 方法
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多