2010-11-17 3 views
1

Я программирую свои первые линии сокетов и выполняю задачу создания клиентской серверной системы, которая передает сообщения между ними. Следующий шаг состоит в том, чтобы сделать заголовок, чтобы получатель знал, сколько данных это сообщение и как это сообщение. Как я могу это сделать?Заголовок в программировании сокетов

Я хочу, чтобы заголовок содержит два INT:

int to_phone_number; 
int size; 

Как это отправить заголовок?

send(sock, the_message, max_message_length, 0); 
+4

Для справки: 'int' не гарантированно будет достаточно большим, чтобы представлять номер телефона (и на самом деле, как правило, нет, если вы не предполагаете, что номера телефонов никогда не превысят 9 цифр и' int' s имеют 32 бита). – cHao

ответ

3

Заголовок, корпус, это данные.

Вы отправите свой заголовок так же, как и вы что-нибудь отправили.

Возможно, вы захотите иметь struct message_header, который будет составлять ваш заголовок.

struct message_header { 
    int to_phone_number; 
    int size; 
}; 

Создать struct message_header переменными, его поле, а затем отправить его.

struct message_header header; 
// ... 
send(sock, &header, sizeof(header), 0); 
+0

Спасибо !!!!!!!!! – user265767

+2

Континент (порядок байтов) между различными системами может быть другим, и это следует учитывать. Традиционно двоичные целочисленные значения отправляются в большом концевом порядке, поэтому 16-битное число «265» будет отправлено как (hex) '01 00', а не' 00 01'. x86 мало ориентирован. Заголовки или имеют функцию переключения между порядком байтов и из сетевого байта, которые работают правильно независимо от системы. Кроме того, 'sizeof (int)' варьируется от системы к системе. Вы можете включить и использовать 'int32_t', чтобы быть уверенным в размере. – nategoose