在不同的线程上连接到TcpListener,进程相同

时间:2010-11-30 23:09:03

标签: c# multithreading tcpclient tcplistener

我正在尝试对一些通信进行单元测试。 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"));

    }

1 个答案:

答案 0 :(得分:2)

您正在使用TcpClient的错误构造函数 - 这个将客户端绑定到本地地址和端口,因此您最终会同时侦听器和客户端尝试抓取{{ 1}}。使用TcpClient( String, int )构造函数。