我在获取客户端IP,PORT的时候遇到这样两个结构,有些不明白的地方向大家请教。
比如说这样一条程序:stcpactive = accept( stcp, (struct sockaddr*)&sin1, (int*)&size );
既然(struct sockaddr*)&sin1可以保存客户端的地址信息,那保存到哪里了呢?
struct sockaddr {
    unsigned short sa_family;
    char           sa_data[14];
};
是sa_family吗?

解决方案 »

  1.   

    另外GetPeerName和getpeername的区别是什么呢?用法有什么区别呢?
    int getpeername (
      SOCKET s,                    
      struct sockaddr FAR*  name,  
      int FAR*  namelen            
    );
    BOOL GetPeerName( CString& rPeerAddress, UINT& rPeerPort );BOOL GetPeerName( SOCKADDR* lpSockAddr, int* lpSockAddrLen );
      

  2.   

    sa_family是地址家族,通常大多是都是AF_INET。通常用SOCKADDR_IN结构体强制转换成SOCKADDR,返回时SOCKADDR_IN结构体中的sin_addr就是对方的IP
    getpeername是API函数,GetPeerName是CAsyncSocket的成员函数
      

  3.   

    sa_data[14]这里,一般用SOCKADDR_IN带入