在 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 的大小。
我需要使用 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 的大小。