搜索
bottom↓
回复: 20

GPRS的tcp数据发送得太快,接收到的数据会断节,怎么解决

[复制链接]

出0入0汤圆

发表于 2009-7-28 09:52:29 | 显示全部楼层 |阅读模式
我每一秒发送一组TCP数据,不断得重发,但在接收端却十几秒才收到,一收就是10多条.而会有脱节现象,断开的数据会在下一次接受的时候才街上.
如:
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQW

ERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG
1234567890QQWERTYUIOPASDFG

如果我没隔3~4秒发一组数据,接收端就一组一组地收,这是怎么回事
我想每秒发送一组数据,怎么解决数据断节问题

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-7-28 10:02:13 | 显示全部楼层
感觉就好象发送得太快,TCP网络发不过来,把数据堆在GSM的寄存器,当数据超过GSM寄存器容量,数据就一次性发出去一样,造成多组数据中的最后一组数据有脱节现象.

是这样吗?高手指点下,和怎么解决

出0入0汤圆

 楼主| 发表于 2009-7-28 10:02:58 | 显示全部楼层
GSM寄存TCP数据的容量是不是可以设置的??,例如:本来可以寸300个字符的,我要把它改成250个,要怎么弄

出0入0汤圆

发表于 2009-7-28 10:04:57 | 显示全部楼层
没所谓饿,数据没丢失就是的
处理这些都是用队列的,毫无影响

出0入0汤圆

 楼主| 发表于 2009-7-28 10:12:06 | 显示全部楼层
你也遇这样的问题吗

出0入0汤圆

 楼主| 发表于 2009-7-28 10:14:51 | 显示全部楼层
那有没有办法设置一下,例如AT指令设置GSM缓冲区大小之类的,然后我就算好几组叠加数据的长度,这样就不会脱节啊

出0入0汤圆

发表于 2009-7-28 10:17:09 | 显示全部楼层
你的这个思路不对,要做队列

出0入0汤圆

发表于 2009-7-28 10:20:06 | 显示全部楼层
1、如果用TCP,请以管道方式发送接收;

2、如果一定要按包收发,请使用UDP,并自行处理顺序和重发问题

出0入0汤圆

 楼主| 发表于 2009-7-28 10:21:11 | 显示全部楼层
就只有做队列这个办法吗?我没做过,是不是就在接收端做队列?

出0入0汤圆

发表于 2009-7-28 10:22:48 | 显示全部楼层
出了FIFO队列,没其他方法

出0入0汤圆

 楼主| 发表于 2009-7-28 10:26:38 | 显示全部楼层
7楼不是说可以以管道的方式发送接受吗?我是新手,你们说的我都还没接触过呢,队列原理我知道,但怎么用还没试过

出0入0汤圆

 楼主| 发表于 2009-7-28 10:29:01 | 显示全部楼层
FIFO队列是要在接收端处理?还是在发送端的MCU上处理啊?有没例子,谢谢你了

出0入0汤圆

发表于 2009-7-28 10:30:07 | 显示全部楼层
显然是接收端

出1070入962汤圆

发表于 2009-7-28 10:36:51 | 显示全部楼层
楼主要理解TCP的原理和操作系统SOCKET工作特点,TCP可以确保数据不丢不错不乱序,但是TCP打包原始数据时多少字节一包,受到诸多因素影响,不是你一个参数能决定的,TCP协议栈实现要兼顾效率与实时性,每个不同的TCPIP实现可能都使用了不同的策略,异构网络之间还有MTU的制约。

所以楼主不要在这个问题上纠结了,TCP数据先发先到,不乱序,不就是个典型的FIFO模型吗?你需要做的是定义自己的协议包,包头,包长度,数据部分,校验都可以不要,然后把TCP当作一个纯管道来用,搞个缓冲区,每当凑满一包数据就处理,没满就等待。

出0入0汤圆

 楼主| 发表于 2009-7-28 10:37:27 | 显示全部楼层
就只有这个办法啊?如果我用MCU控制每4秒左右发一组数据,就一切都正常,在3秒内发一组就谁有以上现象.我没做过队列,有高手指点下不..或者其他解决方法也行,最好就是在发送端能解决的

出0入0汤圆

 楼主| 发表于 2009-7-28 10:39:54 | 显示全部楼层
有个概念了,谢谢个位高手,请问你们有例子没

出0入0汤圆

 楼主| 发表于 2009-7-28 10:54:03 | 显示全部楼层
我刚想到了个办法大家看看行不,既然每3秒能发一次数据是正常的,那我就3组数据一次发啊,可是我发现我用的单片机的RAM只有128,最多只能存2条块数据,那怎办好啊,

出0入0汤圆

发表于 2009-7-28 13:49:16 | 显示全部楼层
TCP/IP协议内部有缓冲 一般情况下它会尽量凑成一足够大完整包 再发送,你可以设置Socket的一些选项,强制任意大小数据立即发送。

出0入0汤圆

 楼主| 发表于 2009-7-28 14:17:58 | 显示全部楼层
17楼你有资料不

出0入0汤圆

发表于 2009-7-28 15:15:36 | 显示全部楼层
想问下楼主的初始化流程和ip配置是怎样的

AT+CGDCONT=1,"ip","cmnet"

AT%CGPCO=1,"PAP,,",1

AT$DESTINFO="192.168.0.198",1,6800

ATD*97#

按这样的顺序发命令可以吗?6800这个端口我已经在路由器设置那里映射到192.168.0.198这个地址了,用下面这个软件接收

(原文件名:未命名1.JPG)

出0入0汤圆

发表于 2010-8-30 15:14:53 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 15:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表