使用send()两次发送不同类型的数据

时间:2012-04-18 10:49:24

标签: c winsock send recv

我有一个客户端连接到服务器并尝试send()一些数据。但是,我需要发送两种类型的数据,让我们说出有关天气和当前时间的信息(仅举例)。

问题是:在客户端我正在调用send()两次,一次发送天气信息,一次发送当前时间,而在服务器中我正在循环{{ 1}}。

我期望(并构建我的代码)是服务器第一次调用recv()它只会获得天气信息,并且第二次调用recv()时间,但只有一个调用recv()足以使两个数据在同一缓冲区上接收。

虽然这可能不是问题但事情是我已经围绕这个假设构建了我的程序,我只是想知道是否有办法实现我想要的(我想到了recv()之间两个sleep()但可能不可靠),这样我就可以节省时间重写代码。

如果有人知道某种方式可以节省我一段时间,所以我很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

在TCP之上没有替代正确的消息协议。 TCP仅传输八位字节流(字节)。 TCP无法传输消息,结构,对象。

如果您围绕TCP可以自行传输消息的假设构建了一个大型程序,那么您就遇到了麻烦。

睡眠()和计时器提供不会以任何可靠或高效的方式工作。您必须正确地执行它并在TCP之上实现协议,例如。通过发送包含数据长度的头或使用开始/结束字节并转义出现在数据中的任一字节。