-3

クライアントからサーバーに整数を送信してcに追加する方法を教えてください。

文字列は正常に送信できましたが、整数の送信方法がわかりません。

私を助けてください!!以下に記述されているコードは、文字列を読み取るためのものです。整数を読み取って追加するように変更するにはどうすればよいですか。

#define SOCK_PATH "echo_socket"

int main(void)
{

 int s, t, len;
 struct sockaddr_un remote;
 char str[100];
 if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
 perror("socket");
 exit(1);
}

 printf("Trying to connect...\n");
 remote.sun_family = AF_UNIX;
 strcpy(remote.sun_path, SOCK_PATH);
 len = strlen(remote.sun_path) + sizeof(remote.sun_family);


 int val=connect(s, (struct sockaddr *)&remote, len);

 if ( val< 0) {
 perror("connect");
 exit(1);
 }

 printf("Connected.\n");

 printf("ENTER THE NUMBERS:");

while(printf("> "), fgets(str, 100, stdin), !feof(stdin)) {

if (send(s, str, strlen(str), 0) == -1) {
perror("send");
exit(1);
}
if ((t=recv(s, str, 100, 0)) > 0) {
str[t] = '\0';
 printf("echo> %s", str);
} else 
{
  if (t < 0) perror("recv");
  else printf("Server closed connection\n");
  exit(1);
 }

}

4

2 に答える 2

3

単純:

int my_int = 1234;
send(socket, &my_int, sizeof(my_int), 0);

上記のコードは、整数そのままソケットに送信します。反対側でそれを受け取るには:

int my_int;
recv(socket, &my_int, sizeof(my_int), 0);

ただし、2つのプログラムがバイトオーダーの異なるシステムで実行される場合は注意が必要です。

編集:プラットフォームの互換性やバイト順序などが心配な場合は、一方の端ですべてのデータを文字列に変換してから、もう一方の端で変換し直すのが最善の選択かもしれません。たとえば、cnicutarからの回答を参照してください。

于 2012-07-12T10:23:43.700 に答える
2

を使用sprintfして、それらを文字列にstrtoul変換してから、整数に戻すことができます。memcpyまたは、char配列との間で整数を使用することもできます。

于 2012-07-12T10:21:59.700 に答える