昨天说了下socket基本几个函数,还有常用的是域名解析函数。
// 通过域名获得ip地址 // is_blocking,是否阻塞,现在只支持none block,也最好用none block // mod_id 如果没有立即获得,那么当查询成完毕,将向该mod 发送消息 // request_id 区分不同的DNS 查询结果。比如在同时查询两个以上,在返回的消息中,就可以通过id来进行区分,这个结果是哪一个查询结果 // addr 如果直接查询到结果,比如命中cache,那么ip地址直接返回 // len 返回的ip地址长度 // access_id 也存放在查询返回消息里面,但不知具体什么用 // nwk_account_id 接入点 kal_int8 soc_gethostbyname(kal_bool is_blocking, module_type mod_id, kal_int32 request_id, const kal_char *domain_name, kal_uint8 *addr, kal_uint8 *addr_len, kal_uint8 access_id, kal_uint32 nwk_account_id);
接下来具体分析一个例子,socket 例子MTK,自带了一个,在EngineerModeSrc.c 和 EngineerModeSocketDemoApp.c 里,里面有好几个socket使用的例子,DNS,ECHO,DAYTIME,TRACERT。文件 EngineerModeSrc.c 里面主要是界面显示逻辑,EngineerModeSocketDemoApp.c 里面是真正的socket 逻辑代码。
在 EngineerModeSrc.c 里面,选择了相应的选项后,最终会走到函数 EntryEmSocketInProgress 显示正在进行网络连接的界面,它调用 EmSocketSendReq 函数 来简单区分,是选择了哪种应用。EmSocketSendReq 根据相关选择信息,调用mmi_soc_demo_app_request进行真正的socket处理。
// 这个函数主要是主要是根据不同配置,初始化全局信息。 // app_id, 是哪一种操作 NDS,HTTP等等 // account_id , grps 帐户id // server_ip_address ip地址 // url url 地址,根据不同类型,确定使用ip地址还是url // echo_txt ,如果是 ECHO,这个表示要发送的内容 // callback 操作的回调函数 int mmi_soc_demo_app_request( mmi_soc_demo_app_enum app_id,