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

标签 c++ sockets tcp

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

通信协议(protocol)本质上是:

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

结果可能是数兆字节的数据。将所有结果发送到客户端后,我希望服务器向客户端发出已完成的信号。

最好的方法是closesocket(),还是它应该发送一个消息告诉客户端没有更多的结果,由客户端决定是否关闭socket?关闭套接字的缺点是客户端如果想执行另一个命令将需要建立一个新的连接,但是从服务器发回消息的缺点是客户端需要扫描每个 recv 以确定结果是否正确。完成了。

哪个是最佳实践?

最佳答案

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

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

这样客户端就知道要读取多少,可以决定是否关闭连接。

关于c++ - 使用套接字,发出通信结束信号的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383038/

相关文章:

c - 仅发送几百个字节后 send() 因 EAGAIN 失败

Java异步客户端,意外行为

php - tcp 消息不完整

c++ - 建立P2P TCP/UDP连接(NAT穿越)

C++ - 程序已停止工作

c++ - 如何在 Go 中使用 C++

cocoa - 通过同一个套接字进行安全和不安全的连接

C++ 不同类型模板化类的显式模板化函数实例化

c++ - const重载而不必写两次函数

networking - 我们可以指示 netsh.exe 将其输出转储到 xml 文件吗?