gpt4 book ai didi

c - 接收服务器响应并将其发送到浏览器?

转载 作者:行者123 更新时间:2023-11-30 15:58:27 25 4
gpt4 key购买 nike

这是我正在编写的基本代理服务器的一部分。此代码读取服务器对 HTTP 请求的响应,然后将其写回客户端(浏览器)。当我用 Firefox 测试它时,它加载了我的大部分主页,但无法加载图像。然后它卡住了,我无法在初始页面之后加载任何其他内容。可能是因为我无法正确关闭连接,以便它可以向我的代理发出另一个请求。我不知道该怎么做。

此处的终端输出停止于“Finished”。它不会打印“重新开始”,但也不会打印“退出 while 循环”。所以我不知道它在哪里被卡住,或者如何正确地结束连接,以便在加载 Google 后我实际上可以启动 Google 搜索,或加载 Gmail 或其他任何东西。

while( (n = read(sock, buffer2, 1024 ) ) >= 1)
{
printf("Started over: %i :(\n\n", n);

buffer2[n] = '\0';
printf( "Rcvd message from server: \n\n----\n\n%s\n\n----\n\n", buffer2 );
n = write( newsock, buffer2, strlen( buffer2 ) );

printf("\n\nFinished.\n\n");
}

close( sock );
printf("\n\nExited while loop.\n\n");

最佳答案

一些建议:

  • 检查 read 的返回码对于零值和负值。
    n > 0意味着n数据字节可用
    n == 0表示对方已关闭连接
    n < 0表示有错误。

  • 如果您的套接字是非阻塞的,请不要在 EAGAIN 上退出循环或EWOULDBLOCK错误,这意味着没有可用数据,但连接仍然打开(因此可能会出现更多数据)。

  • 检查 write 的返回码还有。

  • 从套接字返回的数据可以是二进制的(这就是 read 返回它接收到的字节数的原因)。如果数据恰好包含零字节,则printf将在该点截断其输出,并且 strlen将导致write表现相似。请务必打印/写入全部 n字节。

  • 在调试器中运行代码,这样您就可以真正看到发生了什么。

关于c - 接收服务器响应并将其发送到浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730222/

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