gpt4 book ai didi

c - 读取/写入在我的 TCP 代码中不起作用

转载 作者:可可西里 更新时间:2023-11-01 02:47:31 25 4
gpt4 key购买 nike

我有一个基本的 TCP 客户端/服务器程序。

我在客户端和服务器端都有一个读写方法。我第一次运行它时它工作得很好,但是当它再次运行时(它在一个循环中)它没有读入任何东西。

void printout(int newsockfd, char buffer) {
n = write(newsockfd, a2, 256);
n = write(newsockfd, a3, 256);
n = write(newsockfd, a4, 256);
n = write(newsockfd, a5, 256);
n = write(newsockfd, a6, 256);
}

在服务器中

void printout(char buffer[], int sockfd) {
bzero(buffer, 256);
n = read(sockfd, buffer, 256);
printf("%s\n", buffer);
n = read(sockfd, buffer, 256);
printf("%s\n", buffer);
n = read(sockfd, buffer, 256);
printf("%s\n", buffer);
n = read(sockfd, buffer, 256);
printf("%s\n", buffer);
n = read(sockfd, buffer, 256);
printf("%s\n", buffer);
}

a2、a3、a4、a5 和 a6 是字符串。第一次运行时,它会正确打印所有内容。第二次,它什么也没打印出来,只是一堆空行。当我测试找出缓冲区是什么时,我得到了它的“”。您知道问题出在哪里或我该如何解决吗?

最佳答案

很难查明问题所在,因为您没有向我们展示循环。

但是,突然出现的一件事是您似乎期望对 write() 的每次调用都会与对 read() 的调用相匹配。这不是 TCP 的工作方式:数据包获取片段,您可以获得部分读取等。换句话说,TCP 是一个 stream protocol。而不是面向消息的。

特别是,您应该准备好处理 read() 返回少于 256 字节的情况。您的任何 read() 调用都可能随时发生这种情况。

此外,由于您将 256 字节的 block 视为 C 字符串,因此谨慎的做法是让服务器附加其自己的 NUL 终止符,而不是依赖客户端提供终止符。

关于c - 读取/写入在我的 TCP 代码中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com