请问如何设置WinCE底层Socket发送缓冲区大小或者如何启动PUSH指令,令程序在每次调用send()立即发送

JinxLeader 2016-12-21 06:32:00

请问如何设置WinCE底层Socket发送缓冲区大小或者如何启动PUSH指令,令程序在每次调用send()立即发送。
背景说明:
我作为服务器端使用Socket API用 TCP协议发送数据。数据以256字节为一帧,每秒发送一帧。
现在出现的问题是 在连续运行一天时间里会出现若干次 客户端接收到的数据被重新分包的情况。
如某帧接收到374字节,后一帧接收到128字节,但是数据没有丢。



...全文
1264 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
noaskme 2017-02-23
  • 打赏
  • 举报
回复
tcp的发送受网络影响较大,1秒1包很容易出现粘连,建议发送间隔大于2秒,基本上就不会了,包可以稍微大点,512也没问题
hailee1985 2016-12-22
  • 打赏
  • 举报
回复
每天签个到,幸福生活一辈子
  • 打赏
  • 举报
回复
每秒1帧,不应该出现这样的情况。 你ping一下看看网络时延怎么样。 不过对于TCP包的接收,你最好还是支持粘包的分析。毕竟不是udp。
  • 打赏
  • 举报
回复
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable)); 就是那个TCP_NODELAY,具体你看看CE下怎么写,我原来搞过,不过手上找不到现成代码,你自己看看吧!
  • 打赏
  • 举报
回复
这个很简单,关闭nagle算法就好了。
91program 2016-12-21
  • 打赏
  • 举报
回复
这样的问题,不一定是发送端的问题,而是接收端、或者数据路由的问题。 单纯从发送端不一定能解决哦 Sokcet 发送是有参数设置的,一定时间没有后续的数据就会将缓冲区中的数据发送出去。 特别是网络的情况比较复杂,一般来说接收方必须要做数据”粘“包(两包单独发送的数据,在接收端被一次接收到)、或者分包(一包数据被分成两次接收到,这种情况很少)的处理。 而不是简单的要求对方对发送的参数进行修改,这不是解决问题的根本。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧