Icyan 发表于 2010-8-10 10:56:54

GPRS发送数据的奇怪现象——服务器接收失败

用西门子的MC52i做实验,若干个GPRS模块一起,服务器是自己写的基于socket的小软件,流程大概是这样:
1、每隔5分钟向服务器发送一组数据
2、服务器采用异步多线程方式,监听端口,收到连接请求便开新线程处理
3、服务器收到数据最后的结束标志后,认为完全接收完数据,便主动释放连接
4、服务器主动释放连接后,GPRS模块会得到一组提示,得到提示后便直接断电,进行下一个循环,否则一直等待提示信息,超时(大概3分钟)也直接断电
(因为只是试验,没有作重传处理,也可暴漏GPRS传输数据中会出现的问题)


理论上,服务器收到数据,主动断开连接,然后GPRS模块收到提示,随即断电,这才是正常流程。偶尔有这样的现象:
GPRS已经连接到服务器,GPRS收到正确状态提示后开始发送数据,但数据已经发送(已经通过串口发到GPRS模块),而服务器一直没有收到数据,如此一来两边便都开始无尽的等待……直到GPRS模块超时断电,服务器异常,释放连接。
好吧,虽然可以进行重传处理,但是还有几个问题如下:

1、实际上我并不知道数据什么时候或者有没有通过移动的空中接口发送出去,因为我只是通过单片机串口,将数据传到了GPRS模块,然后便是链路层处理了,是这样吧
2、以前苹果猫还有其他前辈说过,要在应用层‘控制’我们并不能控制的链路层,目前想到的解决方法就是超时重传。不知道还有没有其他的办法?
3、这个真的是链路层的问题么?因为试验中若干模块只有一个这样的现象多一些
4、如果真的是链路层问题,那到底是哪部分或者哪个流程出现问题了呢?模块向基站传送?基站向网关传送?网关向路由传送?路由向服务器传送????
5、以前用网友提供的TCP/IP服务器,有时也有这样的问题,挂上连接,显示有数据传过来了,显示得却是一片空白(我发送的都是可见字符),莫非是我的服务器软件相对没问题,绝对就有问题了:-D,哈

zc3909 发表于 2010-8-10 11:03:29

无论如何只有应用层收到数据才能算数据发送成功,应用程序必须对异常进行处理,这些都是应用层协议的内容,对用户来说只有这个是可控的

Icyan 发表于 2010-8-10 14:21:17

回复【1楼】zc3909
无论如何只有应用层收到数据才能算数据发送成功,应用程序必须对异常进行处理,这些都是应用层协议的内容,对用户来说只有这个是可控的
-----------------------------------------------------------------------

虽说事实是这样,但是完全不了解机制的话,有时也很苦恼吧

Icyan 发表于 2010-8-11 16:27:10

……有人遇到过这种情况么

Appcat 发表于 2010-8-11 17:04:35

中移动的GPRS网络比我们学过的任何一种“标准”网络模型都要复杂多的。
最近有幸接触了AT&T公司的GPRS网络,才发现在那个下面开发代码是一件幸福的事情,而无休止的摸索中移动GPRS网络在不同地区不同时间段的可能行为模式的工作,让人痛苦不堪。最简单的一个例子,头一天拨号TCP连接了服务器,忘记关闭了,第二天上去直接发送数据,服务器很快能收到,也就是说人家根本不会去主动断开长时间闲置的链接。

具体来说,数据发出去后要跨越若干异种网络,可能会遭遇各种非正常情况,GGSN超时重新分配了端口,移动网络出口拥堵,某个网关负载重或者故障,都有可能造成这种现象,只是在GPRS网络中出现这些情况,比有线网络的概率高出了数量级。


既然是这样,就没必要去纠结这里的机制,即使你能将ISO7层模型和TCPIP体系搞到滚瓜烂熟,面对中移动的GPRS,还是有很多出乎意料的现象。所以,1楼是正解,在应用层来处理这个情况,超时重传的思路是对的。

Icyan 发表于 2010-8-12 11:43:38

确实是啊……这两天搞得比较晕,除了超时重传,又想到可以设置多个备份链接,应该也可行吧

还有苹果猫大侠说的“不会去主动断开长时间闲置的链接”,是不是有的模块可以自动发送心跳数据包?我记得在西门子的文档上看到

一个参数,是设置重连间隔的。虽说不是心跳包,但是不是有的模块里也带这种功能呢?

搞得特别不自信……这种意外情况的发生,让人很纠结,找不到原因,一直在怀疑自己编的服务器软件的问题了

不过有一个现象就是,这组实验系统在晚上,凌晨运行特好,基本没毛病,上午还凑合,下午链接失败就逐渐增多了

再PS:如果我想学一下这方面的东西,可不可以推荐些书籍或帮助?不会是去啃GSM协议吧…………

Appcat 发表于 2010-8-12 11:54:12

确实是啊……这两天搞得比较晕,除了超时重传,又想到可以设置多个备份链接,应该也可行吧
----------------------------------------------------------------------------------
备份连接是可以的,我们自己的成品DTU就是支持备份服务器的,不过这个对于基站问题或者GGSN问题,也不能完全解决。


还有苹果猫大侠说的“不会去主动断开长时间闲置的链接”,是不是有的模块可以自动发送心跳数据包?我记得在西门子的文档上看到

一个参数,是设置重连间隔的。虽说不是心跳包,但是不是有的模块里也带这种功能呢?
----------------------------------------------------------------------------------
我的意思是,AT&T公司的SIM卡拨号具有固定IP地址,永久在线,而不是靠心跳来维持的,至于费用,客户说几乎不要钱,叫我们敞开跑流量。


搞得特别不自信……这种意外情况的发生,让人很纠结,找不到原因,一直在怀疑自己编的服务器软件的问题了

不过有一个现象就是,这组实验系统在晚上,凌晨运行特好,基本没毛病,上午还凑合,下午链接失败就逐渐增多了
-----------------------------------------------------------------------------------
这个明显是和区域话务量负载有关系。我们有个系统是安装在大学的,晚上7点~10点基本无法成功上网

Icyan 发表于 2010-8-12 13:04:26

我的意思是,AT&T公司的SIM卡拨号具有固定IP地址,永久在线,而不是靠心跳来维持的,至于费用,客户说几乎不要钱,叫我们敞开跑流量。
---------------------------------------------------------------------------------------------
外网固定IP ??!

中移动VPN的SIM卡不也可以绑定IP么,内网的固定IP,一个月好象8块?还是30来着……

好像CDMA分配的也是固定IP?

不过目前的系统,不是大流量的传输,而是定点上传数据,数据量不大,但对电源要求很高,因为要用电池供电,所以尽量减少GPRS工

作一次的时间才好,永久在线的话,费用不说,电量也是禁不住的

Appcat 发表于 2010-8-12 13:42:00

楼上,我们的设备在北美洲跑,用的AT&T的卡和网络,很多做法不要和中移动等同起来。

Icyan 发表于 2010-8-12 13:50:28

回复【8楼】Appcat 苹果猫
楼上,我们的设备在北美洲跑,用的at&t的卡和网络,很多做法不要和中移动等同起来。
-----------------------------------------------------------------------

咦~~原来是美洲豹,jiong里个jiong~~

羡慕……

happy803 发表于 2011-3-29 22:39:11

mark

comway 发表于 2011-3-30 18:15:58

问题要分开来调试,先把服务器调整稳定,再测试gprs
页: [1]
查看完整版本: GPRS发送数据的奇怪现象——服务器接收失败