Я работаю над проектом клиент / сервер C ++, где строки XML передаются через соединение TCP / IP. Мой вопрос о том, как правильно указать, что вся строка была получена. Я думал о завершенных нулем строках или сначала отправлял длину строки XML, чтобы клиент / сервер мог определить, когда получена полная строка.
Клиент может отправлять команды GET / SET, а сервер может отвечать, а также отправлять непрерывный поток результатов. Например: клиент отправляет <GET ID="DATA1" />
, а сервер отвечает <ID="DATA1" VAL="..." />
Или сервер может отправлять непрерывный поток:
<ID="DATA1" VAL="..." />
<ID="DATA2" VAL="..." />
<ID="DATA3" VAL="..." />
<ID="DATA4" VAL="..." />
В этом случае клиент может получить за одно чтение:
<ID="DATA1" VAL="..." /><ID="DATA2" VAL="..." />
Или, если было отправлено большое количество данных, для чтения всей строки может потребоваться несколько операций чтения.
Использование нулевого символа завершения кажется немного упрощенным (и ломается, если строка в юникоде?), И отправка значения длины также кажется неудобной:
20<ID="DATA1" VAL="1" />
или <length=20><ID="DATA1" VAL="1" />
Это должно быть решено для TX / RX файлов HTML, я просто не могу понять это.
Я использую MFC C ++ (устаревший код) для сервера и .Net C ++ / CLI или C # для клиента.
Любая помощь очень ценится!