2012-02-09 4 views
0

Я недавно начал получать доступ к 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

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

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

Mx

+0

Я пытался избежать использования библиотеки для своего общения, но я думаю, что могу просто использовать этот. Благодарю. – jgallant

Смежные вопросы