2015-10-08 22 views
0

我使用命令行:如何让客户端知道服务器已经完成在C中发送数据?

echo -e -n“GET/HTTP/1.0 \ r \ n \ r \ n”| nc -u -s

模仿客户端来测试我的服务器程序。

客户端一直阻止等待服务器的数据。如何让客户端知道服务器已发送所有数据并停止阻止。

这是我的代码发送文件内容的剪辑。

while(1){ 
      bzero(buf,MAX); 
      fread(buf,MAX,1,fp); 
      if(filelen>=MAX){ 
       sendto(sockfd, buf, MAX, 0, 
       (struct sockaddr *) &cli_addr, cli_len); 
       filelen-=MAX; 
      } 
      else{ 
       sendto(sockfd, buf, filelen, 0, 
       (struct sockaddr *) &cli_addr, cli_len); 
       fclose(fp); 
       break; 
      } 
     } 

回答

1

尝试:

echo -e -n "GET/HTTP/1.0\r\nConnection: Close\r\n\r\n" | nc 

顺便说一句。 HTTP规范说服务器必须在HTTP/1.0中的一个请求之后关闭连接。

PS:为什么使用UDP进行HTTP?

+0

但是客户怎么知道服务器不会发送更多的数据呢?我希望服务器在完成响应之后可以收到另一个请求。我在while循环中使用sendto()来发送数据包中的整个文件内容。我只是为了练习而使用UDP,我知道UDP不适合HTTP。 – Rapidturtle

+0

当服务器关闭连接时,nc将退出。如果您有其他问题,请提出新问题。 – MrTux

相关问题