У меня есть сервер, который отправляет протокол сообщения, который я изобрел клиентам. В протоколе я использую каждый бит очень точно, и существует вероятность того, что все 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
(я бы действительно предпочел не делать этого)?
Я видел пару вопросов, похожих на мой, но ни одногореальные ответы или использование той же библиотеки / функции.