const char *buf
, который вам нужно передать функции send()
в качестве аргумента, это просто указатель на массив байтов. Вам необходимо преобразовать целые числа в байты:
const int MAX_BUF_SIZE = 1024;
int int_data = 4;
const char *str_data = "test";
char *buf = (char*) malloc(MAX_BUF_SIZE);
char *p = buf;
memcpy(&int_data, p, sizeof(int_data));
p += sizeof(int_data);
strcpy(p, str_data);
p += strlen(str_data) + 1;
send(sock, buf, p - buf, 0);
free(buf);
и код чтения:
const int MAX_BUF_SIZE = 1024;
int int_data = 0;
const char *str_data = NULL;
char *buf = (char*) malloc(MAX_BUF_SIZE);
char *p = buf;
recv(sock, buf, MAX_BUF_SIZE, 0);
memcpy(p, &int_data, sizeof(int_data));
p += sizeof(int_data);
str_data = malloc(strlen(p) + 1);
strcpy(str_data, p);
p += strlen(p) + 1;
free(buf);
и сложные объекты должны быть сериализованы для потока байтов.
Примечание 1. Пример кода действителен, если и сервер, и клиент используют одинаковые платформы (x32 / x64 / ...), что означает, что int
имеет одинаковое количество байтов, а порядок байтов одинаков.
Примечание 2. При написании кода следует убедиться, что на каждом шаге нет переполнения буфера (MAX_BUF_SIZE
).