Рассмотрим следующий сценарий:
У меня есть сервер и клиент, и они общаются по определенному протоколу приложения.
Типичный разговор такой: (Предполагая связь между ними)
Я пришел к проблеме реализации этого. Я зацикливаюсь recv()
парсинг сообщения, но как только recv больше не может его вернуть блоки, и мой код не может утверждать, что я получил сообщение целиком, чтобы оно отправило подтверждение.
Мне удалось как-то обойти это, отправив размер сообщения в заголовке сообщения и подсчитывая каждый раз, прочитал ли я столько байтов, сколько размер сообщения, но это не идеально; Что делать, если клиентский компьютер прослушивается и отправляет неправильный размер?
Кроме того, я прочитал в другом вопросе, что весь этот процесс подтверждения, который я делаю, не нужен при использовании tcp, и что tcp уже делает это для вас; но разве рукопожатие делается только один раз за соединение? Что если я не закрою связь между ними? Тогда только одно рукопожатие при создании соединения произошло бы.
Нужно ли создавать новое соединение каждый раз, когда я хочу что-то отправить? И рукопожатие не сделано до данные отправляются, и только при установлении соединения? Так что это может быть не то, что я ищу в моем случае.
Задача ещё не решена.