Поддерживает ли TCP непечатаемые символы?

Я новичок в протоколе TCP / IP и хотел бы создать сервер для чата на C ++.

На данный момент я решил начать все свои передачи с символа, чтобы сказать, что будет дальше (запрос на вход в систему, сообщение для публикации, имя пользователя клиента, …).

Итак, я использую значения, такие как 0x01, 0x02, … для того, что связано с логином, запросом информации, … и 0x10 для сообщений.

Безнадежно, когда я пытаюсь подключиться к своему серверу с помощью другой созданной мной программы, я получаю одну передачу с сервера, которая начинается с 0x01 (так что все в порядке), но затем, когда я отвечаю с чем-то, начинающимся с 0x03, только сервер получить его, когда я убью клиента …

Я думаю, что это функция выбора, которая не говорит, что есть что почитать.

Это нормально?

И если да, я должен заменить эти значения значениями, которые можно распечатать и не имеет специального значения?

1

Решение

TCP является полностью двоичным протоколом. Он определяет заголовок пакета, который следует за заголовком дейтаграммы IP. Непрерывный поток данных делится на пакеты, поэтому он (как мы надеемся) будет плавно переходить из точки А в точку Б. Поток содержит произвольные октеты (байты).

Вы уверены, что единственная разница между сообщениями — это начальное значение байта, $01 против $03? Возможно, размер сообщения отличается? Возможно, один экземпляр делает что-то для очистки потока? Возможно, сообщения отправляются последовательно во время сеанса?

Если вам нужно быстро передать короткие дискретные сообщения, UDP может помочь предотвратить неожиданные задержки.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]