【问题标题】:receiving a server response and sending it to the browser?接收服务器响应并将其发送到浏览器?
【发布时间】:2012-03-16 00:31:23
【问题描述】:

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

这里的终端输出在“完成”处停止。它不会打印“Started over”,但也不会打印“Exited while loop”。所以我不知道它在哪里卡住了,或者如何正确地结束连接,以便在加载谷歌之后我可以真正启动谷歌搜索,或者加载 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");

【问题讨论】:

  • 这是您发布的另一个问题的副本:stackoverflow.com/questions/9728653/…;也许你应该删除这个。
  • 是的,我知道,但我很想得到答案,但我没有得到答案——我知道这是一件坏事。我通常不会这样做。我将删除另一个。

标签: c http network-programming


【解决方案1】:

一些建议:

    1234563 br>n < 0 表示错误。 1234563来了)。
  • 还要检查write的返回码。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多