在 C 套接字编程中 write/read 整数的正确方法

Correct way to write/read integers in C socket programming

我需要使用 write() 函数从 TCP C 服务器传递一个整数,并使用 read()[= 在客户端接收它36=]函数。

在我的服务器中,假设

int check = 0

如何使用 write() 函数发送它?我在我的服务器上试过:

if (write(connfd, (const char *)&check, 4)) {
    perror("Write Error");
    exit(1);
}

在我的客户端上:

if (n = read(sockfd, &check, 4) > 0) {
    printf("ok");
}

但是这个方法既行不通又感觉不自然。我知道我每次都必须传递一个缓冲区,但是有什么方法可以加快速度吗?

此外,重要的是我需要创建一个包含大量变量传输的 server/client 程序。不能同时传递多个变量吗?

编辑: 当我说它不起作用时,我的意思是我得到 "Write Error: Success"。 connfd 和 sockfd 之前已声明如下:

服务器:

if ((connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0) {
    perror("Accept Error");
    exit(1);
}

客户:

if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
    fprintf(stderr,"Connect Error\n");
    exit(1);
}

你说不行,什么意思?

在通过网络发送整数时,您必须牢记的是字节顺序问题,而且整数在不同计算机上的大小可能不同(但在您的情况下这可能不是问题)。 您还需要一个 sendall 方法,例如 this: 以及类似的 readall 方法。

关于你的最后一个问题,你确实可以通过网络发送 4 个整数,你只需要将它们复制到字节数组(无符号字符数组)并在 write 方法调用和相应的方法中指定该数组array/data 的大小。