Реализации TCP обычно предоставляют приложениям только потоковый интерфейс без доступа к отдельным пакетам.(Кроме того, некоторые маршрутизаторы / брандмауэры могут перепаковывать данные в потоках TCP, что означает, что они не обязательно поступают в тех же блоках, что и отправленные.) Таким образом, нам действительно нужно использовать некоторый протокол упаковки наверх TCP (или действительно поверх любой потоковой пары ).
Действительно простым протоколом будет одна строка для каждого запроса / ответа , но это будетработать только с небольшими размерами данных (или вам нужно каким-то образом экранировать встроенные символы новой строки).
Если вы хотите, чтобы это было более структурированным, вы можете использовать что-то на основе XML (например, XMPP): каждый запрос / ответ будет завершенЭлемент XML (включая подэлементы, если необходимо).
Кроме того, если вы хотите использовать схему запрос-ответ , вам нужно будет либо сказать, что ответы должны приходить втот же порядок, в котором были упорядочены запросы (что запрещает или, по крайней мере, усложняет параллельную обработку на стороне сервера для нескольких запросов в одном соединении), или вам придется определитьКроме номеров запросов, в ответах каким-то образом будет указан номер запроса, к которому они относятся.
В качестве примеров HTTP использует первый подход (с 1.1 - до того, как для каждого соединения была только одна пара запрос / ответ),в то время как протокол X использует второй.
Для HTTP уже есть реализации (как на стороне клиента, так и на стороне сервера), и его можно сделать полностью простым текстом (в зависимости от данных, которые вы отправляете).
В качестве альтернативы мы могли бы построить наш протокол непосредственно на протоколе на основе пакетов, таком как UDP.Но это имеет обычные проблемы с надежностью UDP, и нам также необходимо использовать номера сообщений (для связи ответов на запросы) или что-то подобное - что может означать, что нам придется заново реализовать половину TCP.
Так что, извините, нет реального ответа, кроме , используйте HTTP .