2012-05-29 3 views
4

Как отправить серверу 4 байта int и на стороне сервера преобразовать этот буфер в int.Отправить и принять int C++

стороне клиента:

void send_my_id() 
{ 
int my_id = 1233; 
char data_to_send[4]; 
// how to convert my_id to data_send? 
send(sock, (const char*)data_to_send, 4, 0); 
} 

стороне сервера:

void receive_id() 
{ 
int client_id; 
char buffer[4]; 
recv(client_sock, buffer, 4, 0); 
// how to conver buffer to client_id? it must be 1233; 
} 
+1

Как насчет atoi для получения, и itoa для отправки? – Almo

+0

Yup - отправка/получение текст будет работать, тоже. – paulsm4

ответ

10

Вы можете просто указать адрес своего int на номер char* и передать его на адрес send/recv. Обратите внимание на использование htonl и ntohl, чтобы иметь дело с контентом.

void send_my_id() 
{ 
int my_id = 1233; 
int my_net_id = htonl(my_id); 
send(sock, (const char*)&my_net_id, 4, 0); 
} 

void receive_id() 
{ 
int my_net_id; 
int client_id; 
recv(client_sock, &my_net_id, 4, 0); 
client_id = ntohl(my_net_id); 
} 

Примечание: Я сохранил отсутствие проверки результатов. На самом деле вам понадобится дополнительный код для обеспечения того, чтобы и send, и recv передавали все необходимые байты.

+0

@MooingDuck спасибо. –

0

На передающей стороне:

int my_id = 1233; 
char data_to_send[4]; 
memcpy(&data_to_send, &my_id, sizeof(my_id)); 
send(sock, (const char*)data_to_send, 4, 0); 

На приемной стороне:

int client_id; 
char buffer[4]; 
recv(client_sock, buffer, 4, 0); 
memcpy(&my_id, &buffer, sizeof(my_id)); 

NB: размер int и артикуляция должны быть одинаковыми с обеих сторон.

+3

И если «endianness» * не * то же самое, тогда вы * нужны * ntohl() и друзья. Лучшая политика состоит в том, чтобы просто использовать ntohl(), действительно ли это вам нужно или нет - это просто хорошая привычка. ИМХО ... – paulsm4

+0

... лучше это будет больше, чем хорошая привычка. ИМХО, вы не выживете долго с вышеуказанным кодом в дикой природе (каламбур). –

2

Обычным соглашением с начала Интернета было отправить двоичные целые числа в Network Byte Order (читать big-endian). Вы можете использовать htonl(3) и друзей, чтобы сделать это.

Смежные вопросы