我在c ++中调用send
函数后尝试刷新套接字
我使用了winsock2.h
库。
我需要在发送消息后立即发送数据,但我找不到像flash
函数这样的函数。
我正在尝试向设备发送消息,并希望逐个接收消息 我的意思是,如果我在发件人中发送两条消息,如“MessageOne”和“MessageTwo”,则接收方收到的“MessageOneMessageTwo”不是单独的,设备无法识别命令。
那我怎么能这样做?
答案 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)
答案 4 :(得分:0)
在发送方将套接字选项设置为NDELAY