Подключение к TcpListener в другом потоке, тот же процесс

Я пытаюсь провести модульное тестирование некоторых сообщений. код поверх TCP на C#. Я создал быстрый поток, который поддерживает 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"));

    }

person mattmck    schedule 30.11.2010    source источник


Ответы (1)


Вы используете неправильный конструктор TcpClient - это привязывает клиента к локальному адресу и порту, так что в итоге и слушатель, и клиент пытаются захватить 127.0.0.1:1234. Используйте конструктор TcpClient( String, int ).

person Nikolai Fetissov    schedule 30.11.2010
comment
Или пустой ctor TcpClient и используйте метод TcpClient.Connect - person tommed; 09.06.2014