Вы упомянули, что отправляете данные через сокет, так что вы можете свободно использовать любой протокол (даже если вы используете один!), Какой захотите. Я думаю, я бы сделал что-то вроде этого:
Отправьте через сокет следующее:
command : 1 byte (command, enum, let '1' signifiy add_task)
header_size : 4 byte (1 int, size of header. Header is a XML snippet of meta data like doc_name)
doc_size : 4 byte (1 int, size of raw document )
header_data : header_size bytes of data, interpret as an xml string
doc_data : doc_size bytes, interpret as your raw data type
Конечно, существует много протоколов более высокого уровня, которые могут справиться с этим и многое другое. По крайней мере, так вы избегаете странных escape-последовательностей, base64, regex и других частей, которые могут привести к неприятностям.