WinSock recv()消息结束

时间:2014-11-22 01:16:19

标签: c++ winsock network-protocols

考虑以下情况:

我有一台服务器和一台客户端,它们以自定义的应用程序协议进行通信。 典型的对话是这样的:(假设两者之间存在联系)

  1. 客户端向服务器发送消息,并等待确认(不是 与TCP混淆的是,它的消息已被处理
  2. 服务器解析消息,并在消息到达结束时立即发送 向客户确认已经处理过它 消息
  3. 客户获得确认,现在可以自由发送另一个 消息并再次等待确认等等。
  4. 我遇到了实现此问题的问题。我正在循环recv()解析消息但是只要recv没有更多的东西可以返回它阻止,我的代码就不能继续争辩说我收到了整条消息所以它发送一个确认。

    我设法以某种方式通过在消息的标题中发送消息大小来计算,并且每次都计算我是否读取了与消息大小一样多的字节,但这并不理想;如果客户端机器出错并且发送的大小不正确怎么办?

    另外,我在另一个问题中读到,在使用tcp时,我正在做的整个确认过程是不必要的,并且tcp已经为你做了这个;但是每次连接只进行一次握手吗?如果我不关闭两者之间的连接怎么办?然后在创建连接时只会发生一次握手。

    每次我想要发送内容时,是否必须创建新连接?并且在发送数据 之前是否已完成握手,并且仅在进行连接时?所以这可能不是我在寻找的情况。

0 个答案:

没有答案