#include "StdAfx.h" #include "NetAddress.h" #ifndef VC_EXTRALEAN bool CNetworkAddress::GetHostName(char* szName, int size) { if (gethostname(szName, size)==SOCKET_ERROR) return false; return true; } CNetworkAddress::CNetworkAddress() { Clear(); } CNetworkAddress::~CNetworkAddress() { } CNetworkAddress::operator const SOCKADDR_IN&() const { return m_sockAddrIn; } void CNetworkAddress::Clear() { memset(&m_sockAddrIn, 0, sizeof(m_sockAddrIn)); m_sockAddrIn.sin_family=AF_INET; } bool CNetworkAddress::IsIP(const char* c_szAddr) { if (c_szAddr[0]<'0' || c_szAddr[0]>'9') return false; return true; } bool CNetworkAddress::Set(const char* c_szAddr, int port) { if (IsIP(c_szAddr)) { SetIP(c_szAddr); } else { if (!SetDNS(c_szAddr)) return false; } SetPort(port); return true; } void CNetworkAddress::SetLocalIP() { SetIP(INADDR_ANY); } void CNetworkAddress::SetIP(DWORD ip) { m_sockAddrIn.sin_addr.s_addr=htonl(ip); } void CNetworkAddress::SetIP(const char* c_szIP) { m_sockAddrIn.sin_addr.s_addr=inet_addr(c_szIP); } bool CNetworkAddress::SetDNS(const char* c_szDNS) { HOSTENT* pHostent=gethostbyname(c_szDNS); if (!pHostent) return false; memcpy(&m_sockAddrIn.sin_addr, pHostent->h_addr, sizeof(m_sockAddrIn.sin_addr)); return true; } void CNetworkAddress::SetPort(int port) { m_sockAddrIn.sin_port = htons(port); } int CNetworkAddress::GetSize() { return sizeof(m_sockAddrIn); } DWORD CNetworkAddress::GetIP() { return ntohl(m_sockAddrIn.sin_addr.s_addr); } void CNetworkAddress::GetIP(char* szIP, int len) { BYTE IPs[4]; *((DWORD*)IPs)=m_sockAddrIn.sin_addr.s_addr; _snprintf(szIP, len, "%d.%d.%d.%d", IPs[0], IPs[1], IPs[2], IPs[3]); } int CNetworkAddress::GetPort() { return ntohs(m_sockAddrIn.sin_port); } #endif