5

サーバーに 4 バイトを送信しint、サーバー側でこのバッファーを int に変換する方法。

クライアント側:

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;
}
4

3 に答える 3

11

inttoのアドレスを単純にキャストして/char*に渡すことができます。とを使用してエンディアンを処理することに注意してください。sendrecvhtonlntohl

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 の両方が必要なすべてのバイトを確実に転送するようにするには、追加のコードが必要になります。

于 2012-05-29T21:16:08.720 に答える
2

インターネットの開始以来の通常の慣例は、2 進整数をネットワーク バイト オーダー(ビッグ エンディアンを読む) で送信することでした。あなたはhtonl(3)それを行うために友人を使うことができます。

于 2012-05-29T21:16:41.010 に答える
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));

注意: サイズintとエンディアンは両側で同じでなければなりません。

于 2012-05-29T21:15:13.713 に答える