冲洗C++中的插座
Flush a socket in C++
在 c++ 中调用send
函数后,我试图刷新套接字。
我用winsock2.h
图书馆。
我需要在发送消息后立即发送数据,但我找不到任何像flash
函数这样的功能。
我正在尝试向设备发送消息,它希望一一接收消息。
我的意思是,如果我在发送方发送两条消息,如"消息一"和"消息二",接收方收到的"消息一消息二"不是分开的,并且设备无法识别命令。
那我该怎么做呢?
在发送端,您无法使接收端"一个接一个"地接收消息。完全是接收方负责正确重建发送的帧("消息")。接收代码必须以某种方式知道消息长度(完全特定于协议),并接收尽可能多的数据以构建整个帧(通常通过发布具有指定长度的 recv 来实现,并指定仅对整个缓冲区感兴趣,例如。 MSG_WAITALL
旗)。我发现很难相信您的设备不知道如何处理这个问题,如果确实是这种情况,那么您实际上无能为力。我发现您更可能不了解设备/协议要求并且您问了错误的问题。
套接字没有"刷新"功能。如果您需要快速连续发送两条消息,则只需发送它们即可。如果是TCP套接字,那么它们将以正确的顺序(您发送它们的顺序)到达。
这种模式实际上并不少见;首先发送消息头,然后单独发送消息数据。
数据包方案问题的准确答案,示例来自 Winsock 常见问题解答
据我所知,确实没有"冲洗"能力。 send 函数返回发送的字节数,因此您可以迭代循环,直到发送所有字节。
编辑:为了补充我读到的内容,你想从其他用户那里得到。据我所知,增加"内部缓冲区"的唯一方法(刷新它是winsock自己做的事情)是setsockopt,使用so_sendbuf选项。
相关文章:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476%28v=vs.85%29.aspx
发送端将套接字选项设置为 NDELAY
- 蓝牙插座只能读取一次,为什么?
- Asio端接插座功能:取消、关闭、关闭、释放
- 提升 ASIO 打开多个插座
- 网络插座 |无法设置on_close/打开处理程序
- ZMQ:连接 ZMQ 插座时"Resource temporarily unavailable"
- 如何通过插座传输 ESP32-Cam 拍摄的图像?
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- 如何通过pthread发送插座ID
- TOS字段从Linux的TCP插座上接收到的数据包获取
- 不同网络之间的插座编程
- 如何通过1024字节缓冲区和强力冲洗在插座连接上发送6个字符的C弦
- Python/C 远程TCP插座
- 我可以使用Windows上使用ASIO(非凸轮)打开2048个插座
- C DO插座关闭自己的运行时间
- 插座无法接收数据?客户使用boost.asyio库编写.服务器用Python编写
- QT如何显示,请等待对话框,而插座正在等待响应
- 如何在转移中间处理一半的插座
- 发送和接收所有数据(C 插座)
- 当另一端将其关闭时,插座发生了什么
- Windows插座随机接受和接收