以下函数用来根据已知 域名获取ip

get_domain_ofip(CString &m_strName, CString &m_strIP)
{
HOSTENT* hst=NULL;
CString strTemp;
  struct in_addr ia;
  hst = gethostbyname((LPCTSTR)m_strName);

for(int i=0;hst->h_addr_list[i];i++)//vc6报错所指向的地方
  {
  memcpy(&ia.s_addr,hst->h_addr_list[i],sizeof(ia.s_addr));
  strTemp.Format("%s\n",inet_ntoa(ia));
m_strIP+=strTemp;
  }
}

以下函数根据邮箱获取ip,基本是提取@后面部分,然后交给上个函数查询

get_email_ofip(char *in_email, char *out_ip)
{
CString m_email;
CString m_ip;
m_email.Format("%s",in_email);
int at_index=m_email.Find('@');
int length=m_email.GetLength();
int get_num=length-at_index;
CString post=m_email.Mid(at_index+1,get_num);
  get_domain_ofip(post,m_ip);
char szTemp[128]="";
strcpy(szTemp,m_ip.GetBuffer(m_ip.GetLength()));
  for(int i=0;szTemp[i]!='\0'&&szTemp[i]!='\n';i++)
{
out_ip[i]=szTemp[i];
}
  out_ip[i]='\0';
}

单独调用一次可以正常工作

我想实现批量查询众多域名的ip,首先采用的是多线程,找不到崩溃原因

后来使用 for循环

代码如下

char ip[1000];
for(int =0;i<100;i++)
{
//  
get_email_ofip(rec_email[i],ip);
//  
}
rec_emai的定义是
char rec_email[10000][1000]的二维数组,已经赋值;
根据vc的报错是cstring unhandled exception,其中
 hst的
h_name,h_alises,h_addr_list等成员全部是
CXX0030;Error:experssion cannot be evaluated

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

判断hst = gethostbyname((LPCTSTR)m_strName);是否获得正确的值。