我下载了一个源码,其中服务端一段代码如下:
CStringList g_lstIpList;
// 获取本地ip地址
SOCKET_GetLocalIpList(g_lstIpList);
// 如果没有ip地址,则返回
if( g_lstIpList.GetCount()<=0 )
return SM_INTERFACE_NO_IP;if (!g_pServer || !g_pServer->Listen(g_lstIpList,serverInfo.usPort) ){ LOG_Write(g_hLog,"创建会议管理对象失败\r\n");
// 启动监听端口失败
return SM_INTERFACE_LISTEN_FAILED;
}我想修改上面的代码,先用IPAddress获取公网的IP,下面是获取公网IP的代码:
  char szHostName[128];  
  struct hostent * pHost;    
    int i; 
            LPCSTR IPAddress;
   if(gethostname(szHostName,128)==0)    
{
         
     pHost = gethostbyname(szHostName); 
 for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )     
     {
              IPAddress=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);
           
     }
}然后传递给g_lstIpList,不知行不行?高手赐教!谢谢!!

解决方案 »

  1.   

    可以啊, 调用CStringList的AddTail
      

  2.   

    char szHostName[128];  
      struct hostent * pHost;    
        int i; 
                LPCSTR IPAddress;
       if(gethostname(szHostName,128)==0)    
    {
             
         pHost = gethostbyname(szHostName); 
     for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )     
         {
                  IPAddress=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);
               
         }
    }楼主这么容易就得到公网IP了?
      

  3.   

    解决了,上面代码没问题的。我用的是ADSL拨号上网。