MTK socket程序

bushcat 2008-03-03 06:46:14
以下是我在MTK上写的一段测试socket的代码:

kal_uint8 ipnA[16];
kal_uint8 addr_len = 0;
kal_uint8 ipdigit;
kal_uint8 j = 0;
kal_uint8 i = 0;
int ipn;
char *host = "125.71.134.85";

sock = soc_create(PF_INET, SOCK_STREAM, 0, MOD_JASYN, J2ME_current_active_nw_id);

if (sock < 0)
{
//error
}
if ((res = soc_setsockopt(sock, SOC_NBIO, &val, sizeof(val))) < 0)
{
#ifdef MMI_ON_HARDWARE_P
kal_print("Set socket to nonblock mode error !!");
#endif
return;
}
val = SOC_READ | SOC_WRITE | SOC_CLOSE;
if ((res = soc_setsockopt(sock, SOC_ASYNC, &val, sizeof(val))) < 0)
{
#ifdef MMI_ON_HARDWARE_P
kal_print("Set socket to nonblock mode error !!");
#endif
return;
}
SetProtocolEventHandler(em_soc_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND);

for (i = 0; host[i]; i++)
{
ipdigit = 0;
for (; host[i] >= '0' && host[i] <= '9';)
{
ipdigit = ipdigit * 10 + (kal_uint8) host[i++] - '0';
}

if (j >= 4)
{
break;
}
ipnA[j++] = ipdigit;
}

addr_len = 4;
ipn = *(int*)ipnA;

addr.addr[0] = HADDR_0(ipn);
addr.addr[1] = HADDR_1(ipn);
addr.addr[2] = HADDR_2(ipn);
addr.addr[3] = HADDR_3(ipn);

addr.addr_len = sizeof(ipn);
addr.port = (unsigned short)81;

res = soc_connect(sock, &addr);

问题:
为什么最后调用 soc_connetct的时候就死掉了呢?谢谢赐教!!不胜感激
...全文
5032 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
无尽自赎 2012-03-06
  • 打赏
  • 举报
回复
soc_create(SOC_PF_INET, SOC_SOCK_STREAM, 0, MOD_MMI, 10)

soc_create(PF_INET, SOCK_STREAM, 0, MOD_MMI, 10)
版本不同而不同
lxs1011 2011-05-09
  • 打赏
  • 举报
回复
提供成都手机程序员交流的扣扣qun:140382310

瞄准移动互联网,共同学习进步交流。3G,iphone,android,widget,ria,webtop

j260749883 2011-04-15
  • 打赏
  • 举报
回复
顶起31楼
tianshuo001 2010-11-21
  • 打赏
  • 举报
回复
来学习一下。。。
gale56 2010-11-04
  • 打赏
  • 举报
回复
MTK网络是手机网络,同PC上的网络不同,手机网络包括GPRS连接和TCP连接,
所以建立MTK的网络连接时需要首先设置好网络账号,建立GPRS连接,在GPRS连接建立后,
再去建立TCP连接。具体流程如下:
1、设置网络账号的接入点:
在MTK的网络中分wifi、GPRS和GSM三种,我们在上网时使用最多的是GPRS方式。一般情况下,GSM和GPRS分别各有10个账号,在网络->数据账号资料里面可以看到。
GSM的10个账号资料对应的id是从0-9,GPRS的10个账号资料对应的id是从10-19。每个账号资料里面最关键的是接入点,通常情况下,接入点是CMWAP或CMNET。代表
是使用cmwap还是cmnet联网方式。这两种联网方式的区别在于,使用cmwap需要经过中国移动的代理服务器10.0.0.172,才能连接到最终的服务器上去。而cmnet则
直接连接到最终要访问的服务器。账号id在调用soc_create时会用到,由此就决定了用的是哪个接入点,什么方式进行联网。设置接入点可以有两种方式:
1)选择一个已经设置好接入点的账号id,直接拿来使用。
2)通过异步的发消息PRT_MMI_PS_SET_GPRS_DATA_ACCOUNT_REQ方式设置你想要用的账号资料的接入点。

2、生成应用id
appid = cbm_register_app_id((U16) MAIN_MENU_FUNANDGAMES_TEXT, GetRootTitleIcon(MAIN_MENU_FUNANDGAMES_ICON));

如果需要,将GPRS状态设置为保持,这样在每次关闭socket描述符后,不会
关闭GPRS连接,这样在下一次建立TCP连接时,会节省建立GPRS连接的时间,
否则,每次调用soc_connect的时候会自动去建立GPRS连接,这样会花掉3-6秒。
cbm_hold_bearer(MOD_MMI, appid);

3、转换账号id,在MTK联网时,需要用到一个账号id,如果是双卡的手机,
在调用soc_create之前,账户id需要做转换。
nwk_account = cbm_encode_data_account_id(nwk_account, sim_id, appid, KAL_FALSE);

4、创建socket,设置成异步非阻塞的方式,建立TCP连接,设置回调函数,发送和接收数据。

5、关闭socket
kongshoubu 2010-07-30
  • 打赏
  • 举报
回复
弱弱的请问一下这段代码应该放在哪里测试呢?谢谢。
haiquan168 2010-05-30
  • 打赏
  • 举报
回复
不明白
jyhscy 2009-10-06
  • 打赏
  • 举报
回复
恩,不错受益啊,多谢各位大侠们。。。
xiangding 2009-10-03
  • 打赏
  • 举报
回复
支持,在深圳的话,可以找我一起弄下。我玩过MTK的socket.
hebitao505 2009-08-21
  • 打赏
  • 举报
回复
目的有两个:拿分和学习
hebitao505 2009-08-19
  • 打赏
  • 举报
回复
不错不错。。。
拿分走人!!!
chenzhp 2009-08-11
  • 打赏
  • 举报
回复
恩。不错
CGYZDH 2009-07-15
  • 打赏
  • 举报
回复
mark~~
wskyo 2009-07-15
  • 打赏
  • 举报
回复
不是这样写的
wangshangjun1986 2009-07-11
  • 打赏
  • 举报
回复
学习中 受益匪浅
grachel 2009-06-25
  • 打赏
  • 举报
回复
mark~~
taiyear 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhyuanshan 的回复:]
引用 7 楼 lwacmilan 的回复:
我直接在真机试了这个例子,更本就连接不成功,soc_creat还正常,到了soc_connect的时候就有问题,老是返回错误码-14,有大虾是什么原因吗?


有没有先建立GPRS或CDMA?只有先连接了才有IP,才能上网,否则设备上网络是不同的,你可以用IE先试上网,它自己会连接,我写程序已经实现了GPRS和CDMA连接并且正常使用Socket
因为你使用的socket是阻塞的,所以你连接后它一直等待连接反应,程序就死了,…
[/Quote]
请问在MTK手机上实现的CDMA连接?你是不是做的是G+C。谢谢!
wskyo 2009-05-23
  • 打赏
  • 举报
回复
只是看看,
dfh00l 2009-05-23
  • 打赏
  • 举报
回复
请注明MTK平台版本,07B 和O8A,0812,0828版本上是有区别的,如果你的代码是在08.28上是跑不起来的,
hebitao505 2009-04-16
  • 打赏
  • 举报
回复
还是来拿点分
加载更多回复(14)

790

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 其他移动相关
社区管理员
  • 移动开发其他问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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