Программирование на сокете: Как я могу прочитать указанное количество байтов из буфера?
TCP является потоковым протоколом. Чтобы преобразовать этот поток в мои сообщения, я отправляю размер каждого сообщения вместе с самим сообщением. На стороне сервера я сначала читаю первые два байта сообщения, которые имеют размер. Затем я создаю байтовый массив, размер которого равен размеру, который был только что прочитан. Затем я прочитал байты в этот массив. Но по какой-то причине читается больше байтов, чем указано. Как я могу прочитать ровно столько же байтов, сколько я укажу?
Вот мой код:
while (true)
{
data = null;
length = null;
size = new byte[2];
handler.Receive(size);
length += Encoding.ASCII.GetString(size, 0, 2);
System.Console.WriteLine("Size: " + Int32.Parse(length));
bufferSize = Int32.Parse(length) + 2;
bytes = new byte[bufferSize];
handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, bufferSize);
System.Console.WriteLine("Data: " + data);
}
Это мой сервер, работающий на ПК с Windows, написанный на C #. Мой клиент работает на телефоне Android, написанном на Java.