我编写了一个Server/Client程序,现在需要在Server获取Client的IP,在这个程序里,在Server端我用了重载Accept函数防止阻涉.下面是代码.请问怎样才能在Server上获取Client的IP?
// CListenSocketCListenSocket::CListenSocket()
{
}CListenSocket::~CListenSocket()
{
}
void CListenSocket::OnAccept(int nErrorCode)
{
CClientSocket* pSocket=new CClientSocket();
CServerDlg* pMainWnd = ((CServerDlg*) (AfxGetApp()->m_pMainWnd));
if(pMainWnd->m_pSocket->Accept(*pSocket))
{
pMainWnd->m_SocketList.AddTail(pSocket);
}
else
delete pSocket;
CSocket::OnAccept(nErrorCode);
}

解决方案 »

  1.   

    使用 GetPeerName() 函数代码如下//类内
    CString strIPAddr; //IP地址
    UINT uPort; //端口this->GetPeerName(strIPAddr, uPort);//该函数返回后,IP地址和端口就已经获得。//在类的外部也可以调用GetPeerName()函数,该函数为类的共有函数。
      

  2.   

    网上查关于WSAStartup、WNetEnumResource这两个API,可没举局域网内或相邻局域网的所有IP
      

  3.   

    如果此时Server上有多个Client连接,怎么办?
      

  4.   

    连着一个,就用map记住一个。再上来一个,先在map里查一下,看看是否已经登录
      

  5.   

    在你的程序里面,不是已经一个记录socket的链表了吗m_SocketList.GetAt(i)->GetPeerName(strIPAddr,   uPort);用这个就可以得到每个连接的ip地址