Как заставить C ++ TCP Socket recv () читать после завершающего символа? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть сервер, который отправляет протокол сообщения, который я изобрел клиентам. В протоколе я использую каждый бит очень точно, и существует вероятность того, что все 8 битов байта будут равны 0, тем самым появившись в качестве завершающего символа. Когда я посылаю буфер, содержащий завершающий символ в середине буфера, полученные данные читаются только до завершающего символа, и все значения после завершающего символа являются мусором (в моем случае они также равны 0).

Предоставление минимального воспроизводимого примера для этого заняло бы вечность, но я знаю, что это завершающий символ, вызывающий проблему, потому что никакие другие символы не вызывают завершение, кроме 0x00. Вот как я отправляю / получаю буфер от сервера / клиента соответственно:

#define BUFFERSIZE 32
bytesSent = send( sock, outBuffer, BUFFERSIZE, 0); // outBuffer reads: { 0x45, 0x00, 0x73 }
bytesRecv = recv( sock, inBuffer, BUFFERSIZE, 0); // inBuffer reads: { 0x45, 0x00, 0x00 }

Библиотека, которую я использую для сокетов, #include <sys/socket.h>, работает в Linux. Есть ли способ получить все BUFFERSIZE байтов, независимо от завершающих символов среднего буфера? Или мне придется изменить свой протокол, чтобы запретить 0x00 (я бы действительно предпочел не делать этого)?

Я видел пару вопросов, похожих на мой, но ни одногореальные ответы или использование той же библиотеки / функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...