Каким должен быть байт-массив при передаче и получении пакетов на асинхронном клиенте/сервере? - C#

263
03 января 2018, 16:34

Вот есть у меня массив байтов:

const int BUFFER_SIZE = 256;
byte[] buffer = new byte[BUFFER_SIZE];

Допустим, где-нибудь я вызываю метод:

socket.BeginReceive(buffer, 0, BUFFER_SIZE, 0, ReceiveCallback, socket);

Затем на сокет приходит какая-то информация, вызывается метод BeginReceive, в котором я принимаю сообщение, проверяю массив на пустоту и что-нибудь отправляю, если он не пустой:

Socket socket = (Socket)AR.AsyncState;
int bytes = socket.EndReceive(AR);
if (bytes > 0) {
    buffer = BitConverter.GetBytes(12345);
    socket.Send(buffer);
}

И вот теперь, когда мне снова нужно начать получать данные, в этом же методе я вызываю:

socket.BeginReceive(buffer, 0, ?, 0, ReceiveCallback, socket);

Каким должен быть размер получаемого массива?

Иногда случается так, что приходят старые данные, т.е. buffer не изменяется при получении, или вовсе приходит пустой массив. Почему так происходит? Как это вообще работает?

Прошу ссылки на MSDN или не присылать, или вкратце рассказывать, что там написано. Я не сильно дружен с MSDN.

READ ALSO
Просмотр пользователя из базы

Просмотр пользователя из базы

ЗдравствуйтеОсваиваем asp

269
Быстрый по объекту JS

Быстрый по объекту JS

Как получить необходимые значения без миллиона вложенных for (key in data) {}

292
Не выходит ошибка «parsererror» в jQuery ajax

Не выходит ошибка «parsererror» в jQuery ajax

Моя цель увидеть состояние "parsererror" в функции обратного вызова"parsererror" говорит о том что данные приняты но сформированные с ошибкой

276
Помогите понять как работает код(из learn.javascript)

Помогите понять как работает код(из learn.javascript)

Создайте функцию isEmpty(obj), которая возвращает true, если в объекте нет свойств и false – если хоть одно свойство есть

360