相信这个问题对稍微有点经验的人都不难,小弟初学,请指教。我的程序大概是这样的: CServer和CClient类派生于CSocket类,并创建各自的对象。服务器端:
CServer m_server;
CServer m_recv;
客户端:
CClient m_client;在服务端OnAccept()事件中:m_server.Accept(m_rcev); 于是建立了连接。我想知道服务器端如何知道客户端的IP地址?上次一个高手给出代码如下:
if (m_pSocket->Accept(*pSocket,(struct sockaddr FAR *) &acc_sin, (int FAR *) &acc_sin_len ))
{
    pSocket->Init();
    char *destIP = inet_ntoa(acc_sin.sin_addr);//获得客户IP地址
}
我匆忙结了帖子。结果发现自己基础太差根本看不懂。请大家告诉我应该添加代码在什么位置,还有那些变量(比如acc_sin)是哪里冒出来的有什么用,不然用另一种方法来做也好。谢谢!

解决方案 »

  1.   

    virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL );acc_sin是SOCKADDR结构destIP就是客户端得IP地址SOCKADDR Structure
    The SOCKADDR structure has the following form:struct sockaddr {
        unsigned short sa_family;
        char           sa_data[14];
    };The SOCKADDR structure is used to store an Internet Protocol (IP) address for a machine participating in a Windows Sockets communication.
      

  2.   

    acc_in是sockaddr_in结构
    struct sockaddr_in {
            short   sin_family;
            u_short sin_port;
            struct  in_addr sin_addr;
            char    sin_zero[8];
    };
      

  3.   

    sockaddr_in SockAddr; 
    int iNameLen;
    iNameLen = sizeof(sockaddr_in);
    memset(&SockAddr, 0, iNameLen);
    getpeername(Accept,(sockaddr *)&SockAddr,&iNameLen);
    char *pConnectIP = NULL;
    pConnectIP = inet_ntoa(SockAddr.sin_addr);