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

标签 c winsock send recv

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

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

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

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

如果有人知道一种方法,它将节省我相当多的时间,所以我很感谢任何帮助。

最佳答案

除了 TCP 之上的正确消息协议(protocol)之外,没有其他选择。 TCP 仅传输八位位组(字节)流。 TCP 无法传输消息、结构、对象。

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

Sleep() 和计时器 bodges 将无法以任何可靠或高性能的方式工作。您必须正确执行并在 TCP 之上实现协议(protocol),例如。通过发送包含数据长度的 header 或使用开始/结束字节并转义数据中出现的任一字节。

关于c - 使用send()两次发送不同类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207844/

相关文章:

我可以使用 valgrind 来限制我的程序的堆大小吗?

在 system() 之后 close() 奇怪的行为

c - 如何从用户空间使用 ioremap() api 在 uClinux 中读写 SPI Flash 存储器上的寄存器

c++ - LSP 中的套接字更改

C# 通过 HTTP 发送图像

c++ - Winsock - 非阻塞套接字 : send returning 10035

c - 这个类型转换是什么意思? (int (*)[10])

select - 确定用winsock(FIONWRITE)可以发送多少字节?

Ruby Koans 关于消息传递 "send" block 和参数

qt - WSARecv 和 WSABuf 问题