TCP与PLC通信,调用libnodave.dll文件,发现发送过程中,出现接收紊乱的情况,百度说是TCP粘包问题,站在上位机的角度来说,如何修改

polar_code 2017-04-12 09:21:13
TCP/IP的PUSH指令在C#中怎么测试,对于这方面是新人,希望各位大佬能够仔细说明下,不胜感激
...全文
660 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
whoisshut 2019-06-05
  • 打赏
  • 举报
回复
这是PLC 那边的问题,PLC 那边是高位在前,地位在后,所以需要SWAP 这个函数来转换.比如FLOAT 格式对应BYTE1 BYTE2 BYTE3 BYTE4,PLC中的顺序是1,2,3,4.但是在上位机中是4,3,2,1.这个需要你自己处理.PLC 中和libnodave中都有函数,看你在哪一边使用这个函数.lib中的全称你自己搜一下
by_封爱 版主 2017-04-12
  • 打赏
  • 举报
回复
你的问题 跟上位机下位机没关系.. 只是你在接收数据的过程中.没有处理罢了. 我们假设 客户端给你发送abc . 那么如果客户端连续给你发送2次 你不一定执行2次接收方法. 可能收到一次. abcabc. 所以这个时候 就需要"协议"来处理了. 简单的说 就是别人给你的数据 是有规则的. 比如 他们都是已AA开头 BB结尾. 并且BB前面的一个字节是CRC校验位. 所以你可以截取来获取一个完整的"包" 就行了
stherix 2017-04-12
  • 打赏
  • 举报
回复
包文都是有格式的 多个包黏在一起,肯定能通过包头 长度,包尾等设置来分割 如果没有这些东西,分割不了,就是包格式设计的有问题 要么就是客户端根本没做多包分析,这个时候要么改客户端程序 要么你发包的时候只能做延时了,不过这样并不一定靠谱,而且很影响通讯效率
polar_code 2017-04-12
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
包文都是有格式的 多个包黏在一起,肯定能通过包头 长度,包尾等设置来分割 如果没有这些东西,分割不了,就是包格式设计的有问题 要么就是客户端根本没做多包分析,这个时候要么改客户端程序 要么你发包的时候只能做延时了,不过这样并不一定靠谱,而且很影响通讯效率
您所说的延时我使用过,时而靠谱,时而不靠谱,但是负责PLC的那位说他那里处理不了数据,我不知道这种情况下该怎么办,每次一问,就说不能。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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