【问题标题】:Read all bytes from socket in c从c中的套接字读取所有字节
【发布时间】:2014-11-15 11:54:33
【问题描述】:

你好,我需要从socket读取所有数据,有这样的功能

void handle_socket(int sockfd) {
    int len;
    int n;
    char buf[1024];
    n = recv(sockfd, buf, sizeof(buf) - 1, 0);
    while (n > 0) {
        buf[n] = '\0';
        printf("%s", buf);
        n = recv(sockfd, buf, sizeof(buf) - 1, 0);
    }
    printf("Exiting\n");
}

但我在终端看不到Exiting,我做错了什么? 插座sockfd = socket(AF_INET, SOCK_STREAM, 0);
PS 我需要从 POP3 服务器读取响应我试图找到 \r\n.\r\n 但我不能确定这个字符串会在一个缓冲区中(例如 \r\n 在第一个缓冲区和.\r\n 在第 2 次​​p>

【问题讨论】:

  • 客户端是否在某个时候关闭了套接字?
  • @Mat 是的,从程序退出后

标签: c linux sockets


【解决方案1】:

recv() 函数不会返回 0 (EOF),直到另一端关闭连接的进程并且没有数据可供读取。所以当其他进程关闭连接时你会看到“Exiting”。

您的函数用新数据覆盖旧数据。您应该决定是限制缓冲区大小还是为新数据动态扩展内存。我不知道你的限制是什么,但我建议通过调用 fdopen() 创建 FILE 实例并使用 fgetc、fgets 或 getLine 等标准函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 2021-04-03
    • 1970-01-01
    • 2014-04-23
    • 2020-09-05
    • 1970-01-01
    • 2013-07-10
    • 2016-04-22
    相关资源
    最近更新 更多