我正在尝试编写一个 FTP 客户端,我需要打印出服务器对我的命令的响应。这些命令之一是 STAT。服务器返回响应,据我了解,响应位于套接字缓冲区中,我可以使用 read() 命令读取该缓冲区。问题是我只需要 STAT 的响应,所以我知道它将以 END OF STATUS 结束。这是我为阅读响应而编写的代码:
in = read(connFd, &timebuffer, sizeof(timebuffer));;
while(in>0){
printf("%s", timebuffer);
memset(&timebuffer, 0, sizeof timebuffer);
in = read(connFd, &timebuffer, sizeof(timebuffer));
}
memset(&timebuffer, 0, sizeof timebuffer);
我遇到的问题是,一旦 read() 函数通过缓冲区并完成读取,while 循环不会终止并无限继续,我的程序就坐在那里。我认为这是因为 read() 函数正在等待数据,所以我想知道是否有办法告诉 read() 在到达缓冲区末尾时停止。我认为这会自动发生,因为 read() 会返回 x<1 但如果它正在等待我明白问题是什么。那么我该如何解决呢?有没有办法设置超时(0),所以它只会读取已经存在的数据?我也知道有一些“标志”设置为 0,但我找不到太多关于它们的信息。我很感激任何帮助。唯一的方法是检查缓冲区中的“END OF STATUS”字符串吗?我会使用 strstr(buffer)