Я разрабатываю приложение на C #, используя модель сервер-клиент, где сервер отправляет байтовый массив с битовой картой клиенту, клиент загружает его на экран, отправляет «ОК» на сервер и сервер отправляет другое изображение и т. д.
Длина буфера изображения зависит, как правило, от 60 до 90 КБ, но я видел, что это не имеет значения. Если я размещаю клиент и сервер на одном компьютере, используя localhost, все работает нормально. Сервер делает beginSend, а клиент выполняет endReceive, и весь буфер передается.
Тем не менее, я сейчас проверяю это в беспроводной сети, и происходит следующее:
- Сервер отправляет изображение.
- Вызвана функция обратного вызова data_received на клиенте, но есть только 1460 байт для чтения (MTU - почему? Не должно быть только в UDP?)
- Функция обратного вызова data_received на клиенте вызывается снова, теперь с оставшимся буфером (либо 1000 байтов, либо 100 кбайт) ...
Это всегда так: первый пакет с 1460 байтами принимается, а затем второй пакет содержит остальные.
Я могу обойти это, объединив оба полученных байтовых массива, но это кажется неправильным. Я даже не уверен, почему это происходит. Это какое-то ограничение на сеть? Почему же тогда C # не ожидает передачи данных целиком? Я имею в виду, что это TCP, мне не нужно об этом беспокоиться, верно?
В любом случае, любая помощь будет великолепна!
Приветствия