如何通过串口的编程实现GPRS模块在网路上传输数据的系列问题?我很迷惑!!请帮忙都来讨论??

qinchun 2003-05-29 12:03:00

现有条件:
支持GPRS的模块 ,该模块通过串口和PC相连接,该模块能够接受串口的AT命令;
我现在有一块中国移动的支持GPRS的SIM卡;
我有一个INTERNET的合法IP地址,和主机;
主机上面有一个监听一个端口(如8500)的接受TCP/IP的程序。


实现目标:
通过串口编程,控制GPRS模块,将串口发送的应用数据发送至 我的INTERNET 上的主机,最终实现一个回路(即都可以接收和发送)。


已经测试过的方法:
通过在电脑上建立新标准调制解调器,再建立新的INTERNET连接,该连接的属性是支持 PPP,拨号号码为 *99***1#,结果为可以在INTERNET 上访问,比如打开浏览器,可以访问网页,当然这是最简单的。


通过以上测试的得出的结论:
只要电脑是支持PPP协议,TCP/IP协议,那么就能够访问INTERNET,实现相应的应用,包括传输数据。

不确定的条件:
该GPRS模块可能不支持PPP协议;从PC串口接受的数据如果不带有TCP/IP包头可能会被丢弃,因为GPRS模块不支持将串口的数据自动转为TCP/IP包文发往INTERNET。


问题:

1.我能不能跳过PPP协议,在串口编程直接发送TCP/IP的报文,通过GPRS模块,直接将该报文发往我的主机?
2.我需要和中国移动的 GPRS拨入服务器有什么报文的一致性吗?因为我用的是中国移动的SIM卡,拨通了GPRS后,肯定是要走中国移动才能够上INTERNET,那么又增加了一个疑问,那就是从中国移动走是不是一定要用PPP协议,因为PC用GPRS上网都要用的PPP协议。
3.因为GPRS拨通后,会有一个IP地址(这个地址不知道是不是INTERNET上的合法IP地址,但是我想没有关系),那么应该可以通过SOCKET编程,和我的主机建立TCP的连接,最终实现数据的传输.我这样的想法可以实现吗?
...全文
1214 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫孜 2003-06-25
  • 打赏
  • 举报
回复
up
qinchun 2003-06-24
  • 打赏
  • 举报
回复
谢谢大家的讨论,一个月来,有如此多的朋友参加了 关于GPRS PPP 的讨论! 非常感谢!!感谢大家的参与,为了下次大家的更加激烈的讨论,我必须结帖了,实在是有点不忍心现在结帖,但是大家付出了,就会有收获的!!再次感谢!!
zgz 2003-06-24
  • 打赏
  • 举报
回复
如果这个IP地址真的在一段时间后被取消,那就不能说是“永远在线”!PPP协议的IPCP只在建立连接的时候起作用,一旦获得IP后,是不会在改变的,因此,PC的TCP/IP层并不知道这个变化,因此网络就不可用了。。。

最近我经常听说GPRS通讯不稳定,老是吊线,会不会是这个原因呢?

seagate 2003-06-23
  • 打赏
  • 举报
回复
我想请问一下,当用socket连接主机后不发送数据,一段时间后ip被取消后,这个socket还有用吗?是不是还再连?
rokeyliu 2003-06-22
  • 打赏
  • 举报
回复
大家真的讨论得非常好,我觉得应该成立专门讨论gprs和cdma的论坛,真的应该,因为通信时以后我们做事情不能绕开的关口,无线就更不能绕开了。bluecore大虾我认为说的一点应该是正确的,就是,当你长时间没有数据通讯的时候,移动就会取消分配给你的内部ip地址(这个ip地址一定不是一个我们所说的合法ip,它是一个类似局域网的内部ip),这样你用来和服务器建立起来的socket连接就会中断,当你想再次传送数据的时候,你必须再次建立连接!!移动所说的永远在线是指的你不用再次拨号连接。
rokeyliu 2003-06-22
  • 打赏
  • 举报
回复
再一个,我敢肯定肯定像网通这些宽带公司分配给你的ip肯定不是网内ip他是一个合法的ip,一个真实的ip。
gcai 2003-06-21
  • 打赏
  • 举报
回复
mark
fat888 2003-06-21
  • 打赏
  • 举报
回复
其实,这些问题是不应该由大家在这里猜测的。

中国移动公司为什么不公开这些技术呢? tnnd真想不明白。

zijian9dong 2003-06-13
  • 打赏
  • 举报
回复
大家好!我是初入门者,对GPRS的理解只有一点点,遇到的问题却一大堆。事情是这样的:我用两块MC35T模块做数据通讯,两个模块都是接的PC机串口。我的设想是:两个模块分别拨号上网(*99***1#),之后使用WinSock控件进行数据的传送。我没有模块的驱动程序,听说也不需要,只是在添加的标准19200调制解调器的额外初始化命令中加入了“AT+CGDCONT=1,"IP","CMNET"”。但是在进行拨号上网的时候出现了两个错误信息提示:一个是“错误692:调制解调器(或其他连接设备)发生硬件失败”;另一个是:“错误734:ppp连接控制协议会话启动,但被远程计算机的请求中断。服务器可能出现错误。请向系统管理员咨询....”。当出现第一个错误之后就不再进行“网络注册”了,但是在超级终端里面,键入at命令时,能够返回ok。请问上述问题怎样解决?
xh0001 2003-06-11
  • 打赏
  • 举报
回复
太好了,我会把此帖子加到精华版,这样的讨论太好了。希望大家以后能有更多的讨论机会。
bluecore 2003-06-11
  • 打赏
  • 举报
回复
用socket可以实现,我用两块gprs上网,可以通过socket相互收发数据。
不过没有数据量时,移动会取消你的ip.
zgz 2003-06-09
  • 打赏
  • 举报
回复
1.根据资料上说,好像不能通过串口直接发IP包给GPRS Modem,必须封装成PPP包。如果有人直接发IP包可以的话,请告诉我。
2.我有个疑问,我怀疑PPP协议自发生在DTE和GPRS modem之间,之后就是IP包走,不知道对不对。
3. 你得到的地址确实是“内部”地址,但是可以用Socket与Internet上其它主机建立连接,原因是电信有网关。这个IP地址是通过PPP中的IPCP地址协商协议获得的。

我已经在PC上用单独的TCP/IP/PPP协议包软件(不是通过Microsoft的TCP/IP)通过GPRS拨号上网,马上就要移植到手持设备上了。
qinchun 2003-06-09
  • 打赏
  • 举报
回复
感谢!!
感谢所有的朋友,感谢老猫、小帅猪、阿华、阵雨、文石、xiaosheng80、wavelee、zgz(排名不跟先后)! 感谢大家对我的帖子的关注! ~!~

总好像有一种余兴未竟的感觉!其实还有很多值得我们探讨的问题,如果沿着我们大家的讨论思路做下去的话!所以,我会再过几天结帖的,请大家稍安勿躁!

这里,我想把这一段时间来,大家的帖子做一个总结性的发言,如果有不对的地方,还希望大家指正。

GPRS模块应该分为两种,一种是GPRS模块本身就有内嵌的PPP协议,另一种是GPRS模块本身不支持PPP协议。 这两种模块的差价可能为1000元人民币左右,所以一般为了节约成本,在研发是选择后者。因此,我们探讨的前提应该都是以此种 GPRS模块来说的:

下面的图例为 串行接口和以太网口 在INTERNET 上传输的比较

----- 应用层 --------
__________________ __________________
| | | |
| TCP | 传输层 | TCP |
|----------------| |----------------|
| IP | 网络层 | IP |
|----------------| |----------------|
| PPP协议 | 数据链路层 | 以太网协议 |
|----------------| |----------------|
| 串行接口 | 物理层 | 以太网 |
|________________| |________________|



GPRS模块 首先通过AT命令 拨号 ,如中国移动的“*99***1#”,如果 CONNECT OK的话,那么就说明物理层已经连通了。
那么接着要做的工作就是连通 数据链路层 ,那么就是 PPP协议了。
PPP协议包括 LCP(链路控制协议),NCP(网路控制协议),
也就是说物理层连通之后,首先就要通过LCP协议 来配置 串口线路的各项数据格式,和双方的传送数据的约定(详见 RFC,后面结尾会列出RFC的具体文件,供参考),之后就是NCP协议了,NCP 主要是获得IP地址,以及以后在PPP封装中的IP报文的一些具体约定。
之后就可以在PPP报文中封装IP报文进行传送了。
TCP层,当然就是按照TCP协议建立稳定可靠的TCP连接,
最终在物理层(串行线路)传送的的数据格式应该如下了
_____________________________________________________
| PPP数据头 | IP数据头 | TCP数据头 | 数据 |
|_____________|____________|_____________|__________|

1549 PPP in HDLC Framing
1552 The PPP Internetwork Packet Exchange Control Protocol (IPXCP)
1334 PPP Authentication Protocols
1332 PPP Internet Protocol Control Protocol (IPCP)
1661 Link Control Protocol (LCP)
1990 PPP Multilink Protocol
2125 The PPP Bandwidth Allocation Protocol (BAP), The PPP Bandwidth Allocation Control Protocol (BACP)
2097 The PPP NetBIOS Frames Control Protocol (NBFCP)
1962 The PPP Compression Control Protocol (CCP)
1570 PPP LCP Extensions
2284 PPP Extensible Authentication Protocol (EAP) )


再次谢谢大家的帖子!!!
希望大家多指正!!不日,就会结帖!!






rokeyliu 2003-06-08
  • 打赏
  • 举报
回复
看了一下大虾们的留言,学习颇丰。以我目前的理解是:
1、你每次拨移动的服务器,服务器会分配你一个ip地址,但是这是一个虚拟的ip地址
2、用at命令登录GPRS网络之后,你可以通过winsock直接和一个具有合法IP地址的PC建立联系,我们已经实现,并且进行过数据传输,速度不像移动吹的那样不过是有40多K,一般的数据传输足够了。
qinchun 2003-06-06
  • 打赏
  • 举报
回复
谢谢老猫和阵雨的回帖!
因为GPRS拨GPRS费用昂贵,肯定是不能考虑的!!已经花了一个周的时间学习ppp协议,相信不久就能够出成果了!
但是还有一个问题就是:
如果GPRS拨*99***1#,好像是内网的地址,那么我怎么才能够和Internet上的主机相连接呢?用socket编程可以实现吗???
OldKitty 2003-06-06
  • 打赏
  • 举报
回复
一时偷懒,写了几句english。seems to be是说我记不太清楚了,大体上应该是那么回事,但是要确认的话还是要去查一下协议,但是我太懒,一时之间懒得去查。
DTE是只数据终端设备,比如你可以认为PC就是一个DTE(当它利用MODEM通信时,而MODEM就是DCE)。如果你是在开发手机上运行的软件的话,那么应该可以找到相应的接口获得IP而不使用PPP。但是如果你是开发PC、DTE上利用GPRS MODEM上网的软件,那么目前没法绕过PPP。
其实是否内网IP无关紧要,只要你作为发起端可以连接INET上的主机就可以了,网通的宽带不也是给用户内网IP的嘛。
good luck
xiaosheng80 2003-06-06
  • 打赏
  • 举报
回复
first.Thank OldKitty for anwsering my question.
1."Seems to be",Do you can not be sure that?

2.I am now working for mobile phone research, I want to ask you what are working for? Why not you always say the word "DTE", I feel the "DTE" is so abstract,(perhaps I am not clever.) I think you are a 高手. So could you help me analysing how to get the IP address from the mobile phone not saying DTE?

3. I think existing internal IP,it is my presumption, I think it is not bad thing.
Are you sure internal ip is existing or not? If it is not the actual thing to go to internet with gprs? then how, could you draw a simple flow drwing?

Last,Thank you! If you think you have explain the plroblem,please excuse my scrawl.But I think many friends do not be very clear of the problem.
OldKitty 2003-06-06
  • 打赏
  • 举报
回复
1.seems to be.

2.MS gets IP from sm,but DTE can only get this IP from MS by using PPP.

3.maybe, according to somebody's experiment, GGSN gives you an internal IP, but GGSN acts as a router/gateway, so you can use this IP to connect hosts in the internet, and the hosts in the inet can communicate with you, but other hosts can not connect yours as an initiator. Anyway, it's just an issue of GGSN.

Is that clear?
xiaosheng80 2003-06-06
  • 打赏
  • 举报
回复

我有一些疑问:
1。那个PDP报文的地址是不是就是MT的ip地址?我觉得是。
2。我觉得ip地址应该是从session management那儿获得的,至于说通过ppp获得ip,我不大明白具体获得的流程是怎么样的?请高手指点。
3。我觉得ip地址应该有内外之分,通常我们说的mt获得的ip地址应该是内部(相对于internet来说)ip地址,这个地址不是对外的ip地址,这个地址到GGSN那里进行外部ip地址的mapping。
以上三点,都带有猜测成分,望高手指教。
xh0001 2003-06-06
  • 打赏
  • 举报
回复
这个问题我的理解:
1、目前一定要用到PPP连接
2、PPP连接后,获得IP地址,是不是合法的IP不是很清楚
3、在获得IP之后,就可以创建TCP连接了,Socket编程也就可以了
4、断开的时候,一定要先断开TCP连接,然后释放IP,然后再断开PPP连接

希望大家继续讨论,这是在手机中的理解,相信用AT指令也查不太多。
加载更多回复(6)

3,846

社区成员

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

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