Как создать дуплексное соединение, используя TcpListener и TcpClient? - PullRequest
4 голосов
/ 14 декабря 2010

У меня есть ситуация, когда мне нужно отправлять и получать информацию параллельно.
Мой протокол может определять порт чтения и порт записи.

В настоящее время у меня есть следующий код:

public void Listen()
{
    ThreadPool.SetMinThreads(50, 50);
    listener.Start();

    while (true)
    {
        var context = new ListeningContext(listener.AcceptTcpClient(), WritePort);
    }
}

Как я могу создать другого слушателя из TcpClient, который я передаю?

Ответы [ 2 ]

14 голосов
/ 14 декабря 2010

A TcpClient объект оборачивает NetworkStream объект. Вы используете GetStream() метод TcpClient для доступа к объекту NetworkStream, который затем используется для чтения и записи данных в сеть. В статье MSDN для NetworkStream говорится следующее:

Операции чтения и записи могут быть выполняется одновременно на экземпляр класса NetworkStream без необходимости синхронизации. Пока есть одна уникальная нить для операций записи и одного уникальный поток для операций чтения, не будет перекрестных помех между чтением и записью темы и нет требуется синхронизация.

Используйте объект TcpListener для прослушивания входящих соединений. Используйте объект TcpClient, возвращенный из вызова к AcceptTcpClient(), для связи (чтение и запись) с удаленной конечной точкой.

4 голосов
/ 14 декабря 2010

TCP-соединение представляет собой полнодуплексный канал , посмотрите здесь .Вам не нужен отдельный порт или что-то еще.

...