【问题标题】:Reading the socket buffer读取套接字缓冲区
【发布时间】:2012-09-25 03:12:42
【问题描述】:

我正在尝试编写一个 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

【问题讨论】:

    标签: sockets tcp ftp client buffer


    【解决方案1】:

    read 是一个阻塞调用(除非您已将套接字设置为非阻塞),因此只有在收到您请求的确切字节数或套接字关闭时才会返回。

    如果套接字设置为非阻塞,那么您将获得“读取”的零返回,但即使您还没有到达响应的末尾,您也可能会得到它,因为您的程序肯定会比网络。

    作为附加说明...您不能使用strstr(),除非您连接所有读取。您可以在一次阅读中获得 1/2 的终止消息,而在下一次阅读中获得剩余的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2016-04-22
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多