Сначала нужно знать, известно ли, что клиент и сервер всегда имеют одинаковую архитектуру или нет. Это решает, можете ли вы просто отправить data
как есть, или вам нужно заботиться о порядке байтов и размере целого числа.
В любом случае, ntohl
и htonl
позаботятся о порядке байтов и позволят вам передать int
простым, определенным способом (без операций на машинах, которые уже имеют сетевой порядок байтов).
Что касается string
, вы можете отправлять как размер, так и содержимое по TCP просто отлично (преобразовав размер с htonl
), предполагая, что строковые данные либо в одной и той же кодировке с обеих сторон, либо " Общее, независимое "кодирование всегда используется, например UTF-8.
Если вы не знаете, какие кодировки используют машины на обоих концах, у вас проблемы. В этом случае вы должны включить сообщение, определяющее это, и соответственно преобразовать (аналогично тому, как это делают, например, веб-серверы).
Работа протокола TCP в «нормальном режиме» означает, что алгоритм Нейгла будет включен, поэтому вы можете просто использовать 3 вызова send
, и сетевой уровень преобразует это в такое количество пакетов, которое он считает разумным (вместо отправки отдельный пакет только для целого числа).
Это все для простого случая в вашем примере, , или вы можете выполнить некоторую правильную сериализацию , что, конечно, гораздо больше работы.