MTK 编程小节 之 域名解析
来源:互联网 发布:中国数据新闻网 编辑:程序博客网 时间:2024/06/06 03:06
MTK 编程小节 之 域名解析
对于网络编程而言,硬编码IP到客户端,定是下下策,为此,我们需要域名解析功能。MTK对此有类似的解决之道,即soc_gethostbyname,下面将它的用法简单叙述如下
soc_gethostbyname( kal_bool is_blocking,//是否为阻塞式调用,手机平台一般不会支持阻塞式调用的
module_type mod_id, //调用该函数的模块id,也即将来接收消息的模块
kal_int32 request_id,//用于区分是那个请求之用,我们自定义的id值,标示不同的应用
const kal_char *domain_name,//域名
kal_uint8 *addr,//ipv4的ip地址,将来也许会有ipv6的
kal_uint8 *addr_len,//数据长度
kal_uint8 access_id,//这个访问控制id,我没有使用给它赋值为0好了
kal_uint32 nwk_account_id //手机gprs帐户id,做过手机的人自然会明白
)//
补充,调用这个函数不需要建立socket,而且是我们建立tcp/ip连接之前,必须完成一个必备步骤
实例代码如下:
typedef void (* mf_funcOnGetHostByName)(mf_u32 hAddr,mf_u32 nAddr);
static mf_funcOnGetHostByName mf_dnsFunc = NULL;
#define MF_DNS_APPID 1
static void MF_dns_event(void * inMsg)
{
app_soc_get_host_by_name_ind_struct *dns_ind;
if( inMsg )
{
dns_ind = (app_soc_get_host_by_name_ind_struct*) inMsg;
if (dns_ind->result == KAL_TRUE)
{
mf_u32 ipAddr = 0;
switch (dns_ind->request_id)
{
case MF_DNS_APPID:
ClearProtocolEventHandler(MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND);
kal_prompt_trace(MOD_ENG,"MF_getHostByName ip: %d, %d, %d, %d", dns_ind->addr[0], dns_ind->addr[1], dns_ind->addr[2], dns_ind->addr[3]);
MF_memcpy(&ipAddr, dns_ind->addr,dns_ind->addr_len);
if( mf_dnsFunc )
mf_dnsFunc(MF_ntohl((mf_u32)ipAddr),ipAddr);
mf_dnsFunc = NULL;
break;
}
}
}
else if( mf_dnsFunc )
{
mf_dnsFunc(0,0);
}
}
mf_bool MF_getHostByName(mf_s8 * server_domain,mf_u32 * hAddr,mf_u32 * nAddr, mf_funcOnGetHostByName func)
{
kal_int8 ret = MF_FALSE;
static kal_uint8 addr_len=0;
kal_uint32 nwk_account_id = mf_skt_account;
static kal_int16 sDNSHandle = MF_DNS_APPID;
static kal_uint32 ipAddr;
mf_dnsFunc = func;
ret = soc_gethostbyname(KAL_FALSE,
MOD_MMI,
(kal_int32)sDNSHandle,
(const kal_char *)server_domain,
(kal_uint8*)&ipAddr,
(kal_uint8*)&addr_len,
(kal_uint8)0,
nwk_account_id);
if (ret == SOC_SUCCESS)
{
kal_uint8 *ptr;
ptr = (kal_uint8*)&ipAddr;
kal_prompt_trace(MOD_ENG,"MF_getHostByName ip: %d, %d, %d, %d", ptr[0], ptr[1], ptr[2], ptr[3]);
if(hAddr)
*hAddr = MF_ntohl((mf_u32)ipAddr);
if(nAddr)
*nAddr = (mf_u32)ipAddr;
return MF_TRUE;
}
else if(ret == SOC_WOULDBLOCK)
{
SetProtocolEventHandler(MF_dns_event, MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND);
}
kal_prompt_trace(MOD_ENG," MF_getHostByName , ret %d", ret);
return ret;
}
对于网络编程而言,硬编码IP到客户端,定是下下策,为此,我们需要域名解析功能。MTK对此有类似的解决之道,即soc_gethostbyname,下面将它的用法简单叙述如下
soc_gethostbyname( kal_bool is_blocking,//是否为阻塞式调用,手机平台一般不会支持阻塞式调用的
module_type mod_id, //调用该函数的模块id,也即将来接收消息的模块
kal_int32 request_id,//用于区分是那个请求之用,我们自定义的id值,标示不同的应用
const kal_char *domain_name,//域名
kal_uint8 *addr,//ipv4的ip地址,将来也许会有ipv6的
kal_uint8 *addr_len,//数据长度
kal_uint8 access_id,//这个访问控制id,我没有使用给它赋值为0好了
kal_uint32 nwk_account_id //手机gprs帐户id,做过手机的人自然会明白
)//
补充,调用这个函数不需要建立socket,而且是我们建立tcp/ip连接之前,必须完成一个必备步骤
实例代码如下:
typedef void (* mf_funcOnGetHostByName)(mf_u32 hAddr,mf_u32 nAddr);
static mf_funcOnGetHostByName mf_dnsFunc = NULL;
#define MF_DNS_APPID 1
static void MF_dns_event(void * inMsg)
{
app_soc_get_host_by_name_ind_struct *dns_ind;
if( inMsg )
{
dns_ind = (app_soc_get_host_by_name_ind_struct*) inMsg;
if (dns_ind->result == KAL_TRUE)
{
mf_u32 ipAddr = 0;
switch (dns_ind->request_id)
{
case MF_DNS_APPID:
ClearProtocolEventHandler(MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND);
kal_prompt_trace(MOD_ENG,"MF_getHostByName ip: %d, %d, %d, %d", dns_ind->addr[0], dns_ind->addr[1], dns_ind->addr[2], dns_ind->addr[3]);
MF_memcpy(&ipAddr, dns_ind->addr,dns_ind->addr_len);
if( mf_dnsFunc )
mf_dnsFunc(MF_ntohl((mf_u32)ipAddr),ipAddr);
mf_dnsFunc = NULL;
break;
}
}
}
else if( mf_dnsFunc )
{
mf_dnsFunc(0,0);
}
}
mf_bool MF_getHostByName(mf_s8 * server_domain,mf_u32 * hAddr,mf_u32 * nAddr, mf_funcOnGetHostByName func)
{
kal_int8 ret = MF_FALSE;
static kal_uint8 addr_len=0;
kal_uint32 nwk_account_id = mf_skt_account;
static kal_int16 sDNSHandle = MF_DNS_APPID;
static kal_uint32 ipAddr;
mf_dnsFunc = func;
ret = soc_gethostbyname(KAL_FALSE,
MOD_MMI,
(kal_int32)sDNSHandle,
(const kal_char *)server_domain,
(kal_uint8*)&ipAddr,
(kal_uint8*)&addr_len,
(kal_uint8)0,
nwk_account_id);
if (ret == SOC_SUCCESS)
{
kal_uint8 *ptr;
ptr = (kal_uint8*)&ipAddr;
kal_prompt_trace(MOD_ENG,"MF_getHostByName ip: %d, %d, %d, %d", ptr[0], ptr[1], ptr[2], ptr[3]);
if(hAddr)
*hAddr = MF_ntohl((mf_u32)ipAddr);
if(nAddr)
*nAddr = (mf_u32)ipAddr;
return MF_TRUE;
}
else if(ret == SOC_WOULDBLOCK)
{
SetProtocolEventHandler(MF_dns_event, MSG_ID_APP_SOC_GET_HOST_BY_NAME_IND);
}
kal_prompt_trace(MOD_ENG," MF_getHostByName , ret %d", ret);
return ret;
}
- MTK 编程小节 之 域名解析
- MTK socket 操作之域名解析
- C++编程规范之0:不要拘泥于小节
- 编程规范小节
- C语言之网络编程(一)域名解析
- mtk编程
- Socket网络编程【域名解析】
- boost::asio编程-域名解析
- linux 网络编程---域名解析
- Visual C++ Excel编程小节
- 串口调试小节之三 Linux串口应用层编程注意
- 串口调试小节之三 Linux串口应用层编程注意
- 小节
- 小节
- 【转】JavaScript编写之小节
- 26-网络编程-06-网络编程(域名解析)
- 嵌入式ddns域名解析之花生壳
- 负载均衡之DNS域名解析
- web.config
- mySQL命令集锦
- 线性表
- CRF中文分词开源版发布啦
- Python实现txt文件内容快速合并功能
- MTK 编程小节 之 域名解析
- Button input interrupt under linux kernel 2.6.35.7 send message button event
- 在 IIS 中将虚拟目录配置为应用程序
- C#中设定小数位数
- Linux下C 文件读写程序
- WPF窗口跳转及window和page区别
- 软件测试阶段以及产物
- android 内存和电量
- 智能家居网站