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

C 接收服务器响应并将其发送到浏览器?,c,http,network-programming,C,Http,Network Programming,这是我正在编写的基本代理服务器的一部分。此代码读取HTTP请求的服务器响应,然后将其写回客户端(浏览器)。当我用firefox测试它时,它会加载我的大部分主页,但无法加载图像。然后它会冻结,在初始页面之后,我无法加载任何其他内容。可能是因为我无法正确关闭连接,以便它可以向我的代理发出另一个请求。我不知道该怎么做 这里的终端输出在“完成”处停止。它不会打印“重新开始”,但也不会打印“退出时循环”。因此,我不知道它在哪里卡住,或者如何正确结束连接,以便在加载谷歌后,我可以启动谷歌搜索,或加载Gmai

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

这里的终端输出在“完成”处停止。它不会打印“重新开始”,但也不会打印“退出时循环”。因此,我不知道它在哪里卡住,或者如何正确结束连接,以便在加载谷歌后,我可以启动谷歌搜索,或加载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
    eWoldBlock
    错误时退出循环,这意味着没有可用数据,但连接仍然打开(因此可能会有更多数据)

  • 同时检查
    write
    中的返回代码

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

  • 在调试器中运行代码,以便真正了解发生了什么


这是您发布的另一个问题的副本:;也许你应该删除这个。是的,我知道,但我非常渴望得到答案,但我没有得到答案——我知道这是件坏事。我通常不会这么做。我将删除另一个。