Задача интегрироваться в систему где для связи между устройствами используется протокол 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.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей