Несколько NetworkStreams для каждого клиента - PullRequest
0 голосов
/ 09 февраля 2012

Я недавно начал изучать NetworkStreams, и у меня возник вопрос. В настоящее время я создаю тему и обрабатываю все входящие сообщения по мере их поступления.

Вот код, иллюстрирующий это:

client.Connect(serverEndPoint);
clientStream = client.GetStream();
client.NoDelay = true;

ctThread = new Thread(getMessage);
ctThread.Start();  

private void getMessage()
{
    while (true)
    {
        Byte[] data = new Byte[800];
        String responseData = String.Empty;
        Int32 bytes = clientStream.Read(data, 0, data.Length);
        responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

        MessageReceived(this, new ClientMessageEventArgs(responseData));
    }
}

В приведенном выше примере я вызываю событие «MessageReceived», которое обрабатывается в соответствии с данными пакета. Это прекрасно работает, но есть и отдельный случай, когда мне нужно получить данные сразу после отправки запроса.

Можно ли иметь два потока на клиента? Это вообще возможно сделать на одном и том же порту? Как это должно быть обработано? По сути, я хочу иметь возможность отправлять, а затем получать данные сразу после этого (блокируя путь).

1 Ответ

1 голос
/ 09 февраля 2012

Вы можете читать и писать из сетевых потоков независимо друг от друга и безопасным способом. то есть чтение из одного потока и запись из другого.

Если вы извлекаете библиотеку сетевых коммуникаций с открытым исходным кодом networkComms.net , вы можете увидеть, как это достигается независимо в методе отправки SendPacket () ( строка 1304 ) и методе приема IncomingPacketHandler () ( строка 802 ).

Mx

...