char szPeerAddress[16];
::ZeroMemory(szPeerAddress,sizeof(szPeerAddress));
int namelen;
getpeername(m_currAcceptSock,(sockaddr*)&peer,&namelen);
strcpy(szPeerAddress,inet_ntoa(peer.sin_addr));
我想用上面的调用,得到对方的IP.
为什么我得到对方的IP都是“204.204.204.204".

解决方案 »

  1.   

    试试下面的代码struct sockaddr_in sa;int len = sizeof(sa);getpeername(sockfd, (struct sockaddr *)&sa, &len);printf("对方IP:%s", inet_ntoa(sa.sin_addr));
      

  2.   

    int namelen;
    getpeername(m_currAcceptSock,(sockaddr*)&peer,&namelen /*问题在这*/);getpeername
    The Windows Sockets getpeername function retrieves the name of the peer to which a socket is connected.int getpeername (
      SOCKET s,                    
      struct sockaddr FAR*  name,  
      int FAR*  namelen            
    );
     
    Parameters

    [in] A descriptor identifying a connected socket. 
    name 
    [out] The structure that receives the name of the peer. 
    namelen 
    [in/out] A pointer to the size of the name structure. 你的是给了一个指向整数的指针, 不是指向结构的
      

  3.   

    int namelen;
    getpeername(m_currAcceptSock,(sockaddr*)&peer,&namelen);namelen没有赋初始值进去,改成.sockaddr peer;
    int namelen = sizeof(peer);
    getpeername(m_currAcceptSock,(sockaddr*)&peer,&namelen);
    这样就没问题了.
      

  4.   

    getpeername()函数是要在建立连接之后才能获得实际的数据。