Задача интегрироваться в систему где для связи между устройствами используется протокол tcp. Нужно разработать сервер, для другой логики работы с клиентами. Подключение является постоянным.
При открытии сокета клиент отправляет пустое сообщение - оно успешно открывает соединение. Сервер может как отправить свою команду клиенту, так и ожидать сообщение от него. Общение между клиентом и сервером завершается отправкой сообщения с пустым содержимым клиентом или сервером. После завершения общения сервер посылает команду, или ждёт сообщения от клиента.
Что-бы отправить новую команду сервером, нужно завершить предыдущее общение. Но пустое сообщение от клиента, сервер игнорирует.
Я использовал Асинхронное подключение с официального сайта. При получении пустого сообщения сокет не заходит в ReadCallback. Я тестировал на синхронном сокете, там Receive так-же не слушает пустые сообщения. Wireshark эти запросы прекрасно видит
Может кто-нибудь подсказать как можно решить эту проблему? Возможно использовать другие средства?
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.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости