【问题标题】:Receiving response from server using I/O in C with sockets使用带有套接字的 C 中的 I/O 接收来自服务器的响应
【发布时间】:2013-04-08 15:03:59
【问题描述】:

我正在尝试使用套接字制作一个简单的 Web 客户端。我向网页发送 GET 请求并希望接收 HTML 文件。我知道我可以使用recv() 接收,但我想使用FILE 来接收。我正在使用fdopen 将套接字包装在FILE 中。现在我可以使用fgetc() 来阅读回复。但是,fgets() 失败了——也许我用错了。有什么方法可以轻松逐行读取 HTTP 响应?

这行得通:

FILE *input = fdopen(mySocket, "r");

while(!feof(input))
{
   printf("%c", fgetc(input));
}

我需要一些类似的东西:

FILE *input = fdopen(mySocket, "r");
char c[2000];
while(fgets(c, sizeof(c), input) != NULL)
{
   printf("%s\n", c);
}

如果有其他方便的方式阅读回复,请指教。

【问题讨论】:

  • 逐行阅读不包含换行符的响应对我来说似乎很困难,并不是说不可能。
  • 其实我认为响应确实有换行符。但由于某种原因,我无法让 fgets 正确阅读。
  • 您遇到什么错误?提示:#include <errno.h>perror("fgets:");
  • 你确定input != NULL
  • 在调用任何打开的函数后始终检查错误(perror 是您快速报告控制台错误的朋友)。

标签: c sockets get fgets recv


【解决方案1】:

我刚刚添加了错误检查,它现在可以工作了。输入确实为 NULL,因为我的请求从未通过。谢谢!

FILE *input= fdopen(mySocket, "r");
if(input== NULL)
{
printf("Error");
    exit 1;
}

char c[2000];
while(fgets(c, sizeof(c), input) != NULL)
{
    printf("%s\n", c);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2015-04-23
    相关资源
    最近更新 更多