Receive игнорирует сообщения с data[0]

101
28 августа 2021, 00:10

Задача интегрироваться в систему где для связи между устройствами используется протокол tcp. Нужно разработать сервер, для другой логики работы с клиентами. Подключение является постоянным.

При открытии сокета клиент отправляет пустое сообщение - оно успешно открывает соединение. Сервер может как отправить свою команду клиенту, так и ожидать сообщение от него. Общение между клиентом и сервером завершается отправкой сообщения с пустым содержимым клиентом или сервером. После завершения общения сервер посылает команду, или ждёт сообщения от клиента.

Что-бы отправить новую команду сервером, нужно завершить предыдущее общение. Но пустое сообщение от клиента, сервер игнорирует.

Я использовал Асинхронное подключение с официального сайта. При получении пустого сообщения сокет не заходит в ReadCallback. Я тестировал на синхронном сокете, там Receive так-же не слушает пустые сообщения. Wireshark эти запросы прекрасно видит

Может кто-нибудь подсказать как можно решить эту проблему? Возможно использовать другие средства?

Answer 1

TCP сокеты не работают в терминах сообщений, по крайней мене не с точки зрения WinAPI и .NET. Сокет - это труба, в который вы пишете байты, которые читаются с другой стороны. Отправленное двумя "сообщениями" может дойти в виде одного вызова callback. И наоборот, отправленное одним сообщением может дойти на другую сторону двумя отдельными вызовами callback.

Пустое "сообщение", соответственно, не доходит никак - пока нет вычитываемых байт - callback не вызывается. 0 байт вычитается только в случае, если друга сторона закроет соединение.

For byte streams, zero bytes having been read indicates graceful closure and that no more bytes will ever be read.

READ ALSO
C#. Как в Windows Form изображение сделать круглым

C#. Как в Windows Form изображение сделать круглым

Создавая программу, мне понадобилось создать picture Box, который для моего дизайна должен быть круглымПомогите понять, как это сделать

110
Выполнение кода из textbox

Выполнение кода из textbox

Помогите реализовать такую идею: Ввожу в textbox1 определенный код и при нажатии на кнопку он выполняетсяИдеи с if(

169
Как защитить sql insert от sql injection в python?

Как защитить sql insert от sql injection в python?

Как защитить такой insert запрос от sql инъекций ? Я использую python 37 и БД mysql 5

169