使用套接字,发出通信结束信号的最佳做法是什么?

时间:2012-02-21 18:28:31

标签: c++ sockets tcp-ip

我正在使用C ++中的套接字编写客户端 - 服务器应用程序。

通信协议基本上是:

  1. 客户端连接到服务器。
  2. 客户端“发送”ASCII命令到服务器。
  3. 服务器远程执行命令,并获取结果,并将结果发送回客户端。
  4. 结果可以是多兆字节的数据。一旦将所有结果发送到客户端,我希望服务器向客户端发出信号已完成的信号。

    是closesocket()的最佳方式,还是应该向客户端发送一条消息,指示客户端没有更多结果,客户端是否可以决定是否关闭套接字?关闭套接字的缺点是,如果客户端想要执行另一个命令,则需要建立新连接,但是从服务器发回消息的缺点是客户端需要扫描每个recv以确定结果完成了。

    哪种是最佳做法?

1 个答案:

答案 0 :(得分:3)

我会采取一种略微横向的方法:

  • 客户端向服务器发送命令
  • 服务器发送响应大小,然后发送实际响应
  • 客户端可以发出新命令/关闭连接

通过这种方式,客户端知道要读取多少,并可以决定是否关闭连接。