2013-09-30 2 views
0

Я работаю над клиент-серверным приложением.TCPClient - отправка и получение перекрытия

Я использую TCPClient для сервера и клиента.

Сервер прослушивает и отвечает и клиент будет отправлять и получать. Каждый ответ с сервера содержит различную длину сообщения.

У клиента 2 запроса. Один из них - запрос ping, а другой - запрос данных.

Я создал поток для ping-сервера каждые 10 секунд.

Запрос данных отправляется клиентом, когда пользователь нажимает кнопку отправки.

Сервер отвечает на запрос ping, отправив 2 байта обратно клиенту.

Сервер отвечает на запрос данных, отправив обратно 8 байтов.

Вот проблема, с которой я сталкиваюсь.

Пинг-поток иногда посылает запрос на сервер одновременно с нажатием кнопки отправки.

Теперь метод запроса данных считывает из сокета и ожидает 8 байтов, но только получение 2 байтов, таким образом, долгое время зависает.

вот отрывок из метода запроса данных:

byteBuffer = new byte[8]; 
remainingBytes = byteBuffer.Length; 
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes); 

вот фрагмент из пинг нити:

byteBuffer = new byte[2]; 
remainingBytes = byteBuffer.Length; 
numberOfBytesRead = netStream.Read(byteBuffer, index, remainingBytes); 

Что я могу сделать так, чтобы клиент знает, какой ответ идет какой метод?

Благодаря

ответ

2

Понадобится:

  1. Один поток читает все.
  2. Идентификатор на лицевой стороне каждого сообщения: ЗАПРОС или ПИНГ.

Поток чтения читает один байт, решает, что это такое, считывает как можно больше байтов и отвечает.

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