#include "StdAfx.h" #include "SockAddrIn.h" #include "SocketHandle.h" // SockAddrIn ��ʵ��; SockAddrIn SockAddrIn::NULLAddr; SockAddrIn::SockAddrIn() { Clear(); } SockAddrIn::SockAddrIn(IN const SockAddrIn& sin) { Copy( sin ); } SockAddrIn::~SockAddrIn(){} // ��սṹ��; void SockAddrIn::Clear() { memset(this, 0, sizeof(sockaddr_storage)); } /************************************************************************/ /* ������Copy[2/28/2016 IT]; /* ���������ƽṹ��; /* ������; /* [IN] sin��SockAddrIn��������;; /* ���أ�����thisָ��; /* ע�⣺; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ SockAddrIn& SockAddrIn::Copy(IN const SockAddrIn& sin) { ss_family = sin.ss_family; memcpy(this, &sin, Size()); return *this; } /************************************************************************/ /* ������IsEqual[2/28/2016 IT]; /* �������Ա������ַ�����Ƿ���ͬ; /* ������; /* [IN] ��; /* ���أ���ͬ����TRUE,����FALSE; /* ע�⣺; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ bool SockAddrIn::IsEqual(IN const SockAddrIn& sin) const { if ( ss_family == AF_INET ) {// AF_INET��IPV4Э���ַ��ר��,����Ҫ����sin_zero[8]����; return (memcmp(this, &sin, Size() - 8) == 0); } // �����IPV6��ַ�ṹ��AF_INET6��; return (memcmp(this, &sin, Size()) == 0); } /************************************************************************/ /* ������CreateFrom[2/29/2016 IT]; /* ������������������ֵ�ַ,��Ҫ�������ַ�����ʽ����; /* ������; /* [IN] pszAddr������˵�ַ������������; /* [IN] pszService���ַ�����ʽ��IP�˿ڻ������; /* [IN] nFamily�������ַ�����ͣ�IPV4��IPV6��; /* [OUT] ��; /* [IN/OUT] ��; /* ���أ��ɹ���������TRUE; /* ע�⣺; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ bool SockAddrIn::CreateFrom(IN LPCTSTR pszAddr, IN LPCTSTR pszService, IN int nFamily /*=AF_INET*/, bool bIsClient /*= true*/) { Clear(); CSocketHandle::GetAddressInfo(pszAddr, pszService, nFamily, *this, bIsClient); return !IsNull(); } /************************************************************************/ /* ������CreateFrom[2/29/2016 IT]; /* ������������������ֵ�ַ,��Ҫ��������ֵ��ʽ����(ֻ֧��IPV4); /* ������; /* [IN] lIPAddr����ֵ��ʽ��IP��ַ; /* [IN] nPort����ֵ��ʽ�ķ���˶˿ں�; /* [IN] nFamily�������ַ�����ͣ�Ĭ��AF_INET��; /* [IN] bFmtHost�� /* ��־IP��ַ������1���Ͷ˿ڣ�����2���������ֽ���HBO(Host By Order),��С��ģʽ(little-endian) /* �������ֽ���NBO(NetWork By Order),�����ģʽ(big-endian); /* ���أ��ɹ���������TRUE; /* ע�⣺�ú���ֻ֧��IPV4�����ַ; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ bool SockAddrIn::CreateFrom(IN ULONG lIPAddr, IN USHORT nPort, IN int nFamily /*= AF_INET*/, IN bool bFmtHost /*= true*/) { Clear(); _ASSERTE( nFamily == AF_INET ); // supports IPv4 only SOCKADDR_IN* psin = reinterpret_cast<SOCKADDR_IN*>(this); psin->sin_family = static_cast<short>(nFamily); if ( bFmtHost ) { psin->sin_addr.s_addr = htonl( lIPAddr ); psin->sin_port = htons( nPort ); } else { psin->sin_addr.s_addr = lIPAddr; psin->sin_port = nPort; } return !IsNull(); }