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

using sockets, what is the best practice to signal an end of communications?

本文关键字:信号 最佳 是什么 结束 通信 套接字      更新时间:2023-10-16

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

通信协议本质上是:

  1. 客户端连接到服务器
  2. 客户端向服务器"发送"ASCII命令
  3. 服务器远程执行命令,获取结果,并将结果发送回客户端

结果可以是多兆字节的数据。一旦所有结果都发送到客户端,我希望服务器向客户端发出完成的信号。

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

哪种做法是最好的?

我会采取稍微横向的方法:

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

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