//处理客户端的连接信息
void CChatSvrDlg::ProcessPendingAccept() 
{
//生成一个新的套节字与客户端通讯
CClientSocket* pSocket = new CClientSocket(this); if (m_pSocket->Accept(*pSocket))
{
//将该套节字保存起来
m_connectionList.AddTail(pSocket);          sockaddr_in * addr=new sockaddr_in(); 
  memset(addr,0,sizeof(addr));
                            int size=sizeof(addr); pSocket->GetPeerName((SOCKADDR *)addr,&size);
CString ss=inet_ntoa(addr->sin_addr);
AfxMessageBox(ss);  //205.205.205.205 
}
else
delete pSocket;
}
源码如上。使用CSocket,在服务器获取连接的客户端的ip地址,使用GetPeerName方法,获得的地址总是 205.205.205.205  ,根本就不是我的ip地址。可能有很多人会说我的pSocket不正确,其实是对的,pSocket可以正常通讯的!!上网查了很多资料,可是没有答案,都说用GetPeerName,可是我为什么不能正确得到呢?在线等!希望高手告知啊!!!

解决方案 »

  1.   

    205.205.205.205  == 0xCDCDCDCD
      

  2.   

    gx lz。
    205.205.205.205  = 0xCDCDCDCD
    根本没得到值。
    呵呵。
      

  3.   

    以下几句有问题:
            sockaddr_in * addr=new sockaddr_in(); 
     memset(addr,0,sizeof(addr));//这里有问题
                               int size=sizeof(addr);//这里有问题pSocket->GetPeerName((SOCKADDR *)addr,&size);//这里有问题
    CString ss=inet_ntoa(addr->sin_addr);//如果你不用new运算符,而是局部变量,这个问题就可能不会出现。