//处理客户端的连接信息
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,可是我为什么不能正确得到呢?在线等!希望高手告知啊!!!
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,可是我为什么不能正确得到呢?在线等!希望高手告知啊!!!
205.205.205.205 = 0xCDCDCDCD
根本没得到值。
呵呵。
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运算符,而是局部变量,这个问题就可能不会出现。