GPRS:通用分组无线技术(General packet radios service),GSM网络覆盖的区域都可快速实现GPRS的覆盖.
gprs的特点:高速率的数据传输.目前gprs速率达到40kb/s以上,gprs可实现的最高速率是171.2kb/s.EDGE最高速率可达到384kb/s.可以提供按流量计费方式.快捷登录,永远在线.gprs的用户一开机就始终附着在gprs网络上,登录时间只要1-3秒,远快于普通拨号方式.
中国移动gprs网络有两个接入点:cmwap和cmnet.
如果使用cmwap接入点连接上gprs网络后手机得到的ip地址形如10.x.x.x,这个地址是一个A类地址,也就是内网地址.这个地址的访问受到很多限制,它只能够访问gprs网而不能访问整个internet,如果要用这个地址访问internet就需要使用代理服务器,如中国移动的10.0.0.172的80端口.
如果使用cmnet接入点连接上gprs网络后手机得到的ip地址是一个形如202.x.x.x或者61.x.x.x这样的地址.这是一个C类地址,它可以自由的访问整个internet,也就说它和电脑的上网能力是一样.但是有些地方的移动卡不支持cmnet.
mtk平台手机基于gprs连接pc的实现方式(tcp通讯方式)
1.建立data account(上网账号)
MMI层发送PRT_MMI_PS_SET_GPRS_DATA_ACCOUNT_REQ消息到L4C层,在消息中设定data account 的id(1-10),自定义名称,APN(cmnet,cmwap),用户名,密码,DNS等信息.
2.创建socket
手机上用socket建立连接和pc用socket建立连接的原理是一样的,只是api函数不一样.
kal_int8 soc_create(kal_uint8 domain, socket_type_enum type, kal_uint8 protocol, module_type mod_id, kal_uint32 nwk_account_id);
3.设置socket的异步非阻塞模式
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size);
这里的第二个参数option设置为SOC_NBIO(socket非阻塞模式)
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size);
这里的第二个参数option设置为SOC_ASYNC(异步i/o)
4.建立连接
kal_int8 soc_connect(kal_int8 s, sockaddr_struct *addr);
5.发送数据
kal_int32 soc_send(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags);
6.读取数据
kal_int32 soc_recv(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags);
7.关闭连接
kal_int8 soc_close(kal_int8 s);
程序开发要点:
1.实现之前要规定好发送方和接收方数据传输的协议,数据格式.包括如何确定数据长度,校验算法,是否加密等.
2.要注意对其方式和存储方式.如果发送方和接收方的对其方式和存储方式不一样,数据可能会传输错误.
3.错误处理,确保可以捕捉到所有错误,从而关闭socket连接,释放资源.
4.超时设定,由于socket接口没有提供超时功能,所以需要自己实现超时功能,可在每次操作前设定timer,如超时仍没有收到消息,则进行错误处理,特别要考虑到多个socket同时打开的情况.
文章只是简单的介绍了在mtk平台手机上如何使用socket套接字来实现网络通讯,下一篇我会给出一个示例代码来详细说明mtk手机的socket套接字是如何实现异步I/O和消息驱动模型的.