-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);

但是,如果这两个程序在具有不同字节顺序的系统上运行,请小心。

编辑:如果您担心平台兼容性、字节顺序等,那么在一端将所有数据转换为字符串,然后在另一端将其转换回,可能是最佳选择。参见例如来自 cnicutar 的答案。

于 2012-07-12T10:23:43.700 回答
2

您可以使用sprintf将它们转换为字符串,然后strtoul将它们转换回整数。或者你可以只是memcpy整数进出一个 char 数组。

于 2012-07-12T10:21:59.700 回答