Несмотря на то, что сокет открыт , нет способа сделать это, не заставив его заблокироваться, когда он достигнет конца (ожидая больше данных).
Есть несколько способов сделать это:
- закрыть сокет после отправки
- имеет некоторый маркер, который означает «конец сообщения» (достаточно просто с закодированным текстом -
0
является обычным выбором; хотя сложно посылать произвольные двоичные данные)
- отправляет префикс длины перед данными (в нашем случае 100 000), и прекращает чтение , когда вы получаете столько
Если это был NetworkStream
, например, с использованием префикса длины:
int expecting = //TODO: read header in your chosen form
int bytesRead;
while(expecting > 0 && (bytesRead = stream.Read(buffer, 0,
Math.Min(expecting, buffer.Length))) > 0)
{
// TODO: do something with the newly buffered data
expecting -= bytesRead;
}