用C ++刷新套接字

时间:2012-10-10 08:12:06

标签: c++ sockets network-programming winsock2

我在c ++中调用send函数后尝试刷新套接字 我使用了winsock2.h库。

我需要在发送消息后立即发送数据,但我找不到像flash函数这样的函数。

我正在尝试向设备发送消息,并希望逐个接收消息 我的意思是,如果我在发件人中发送两条消息,如“MessageOne”和“MessageTwo”,则接收方收到的“MessageOneMessageTwo”不是单独的,设备无法识别命令。

那我怎么能这样做?

5 个答案:

答案 0 :(得分:6)

您无法在发送方面做任何事情,使接收方面逐个接收消息。完全是接收方负责正确重建发送的帧('消息')。接收代码必须知道消息长度以某种方式(完全是协议特定的)并接收尽可能多的数据以构造整个帧(通常通过发布具有指定长度的recv并且指定仅对整个缓冲区,例如MSG_WAITALL标志)。我发现很难相信你的设备不知道如何处理这个问题,如果确实如此,你可以做的就是 nothing 。我发现你不太可能不理解设备/协议的要求而且你提出了错误的问题。

答案 1 :(得分:1)

套接字没有“刷新”功能。如果您需要快速连续发送两条消息,则只需发送它们即可。如果它是TCP套接字,那么它们将以正确的顺序(您发送它们的顺序)到达。

这种模式实际上并不少见;首先发送一个消息头,然后单独发送消息数据。

答案 2 :(得分:0)

据我所知,确实没有“同花顺”的能力。 send函数返回发送的字节数,因此您可以迭代循环直到发送所有字节。

编辑: 添加到我从其他用户那里读到的内容。我知道增加“内部缓冲区”的唯一方法(刷新它是winsock自己做的事情)是setsockopt,使用so_sendbuf选项。

与之相关的文章:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476%28v=vs.85%29.aspx

答案 3 :(得分:0)

来自Winsock FAQ

的示例的数据包方案问题的准确答案

答案 4 :(得分:0)

在发送方将套接字选项设置为NDELAY