www.pudn.com > HttpServerusingWinSocket.rar > SocketAddress.h


// SocketAddress.h: interface for the CSocketAddress class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_SOCKETADDRESS_H__CEB408D8_DD0E_43C4_B440_FD60AD0788BD__INCLUDED_) 
#define AFX_SOCKETADDRESS_H__CEB408D8_DD0E_43C4_B440_FD60AD0788BD__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
//#include  
 
class CSocketAddress : public sockaddr_in   
{ 
public: 
	CSocketAddress(); 
	CSocketAddress(const SOCKADDR &sa){ 
		memcpy(this,&sa,sizeof(SOCKADDR)); 
	} 
	CSocketAddress(const SOCKADDR_IN &sin){ 
		memcpy(this,&sin,sizeof(SOCKADDR_IN)); 
	} 
	CSocketAddress(const ULONG ulAddr,const USHORT ushPort=0){ 
		//参数是主机的字节顺序 
		sin_family=AF_INET; 
		sin_port=htons(ushPort); 
		sin_addr.s_addr=htonl(ulAddr); 
	} 
	CSocketAddress(const char* pchIP,const USHORT ushPort=0){ 
		//带点的十进制格式的IP地址 
		sin_family=AF_INET; 
		sin_port=htons(ushPort); 
		sin_addr.s_addr=inet_addr(pchIP);//网络字节顺序 
	} 
	CString DottedDecimal(){ 
		//以带点的十进制格式返回地址 
		return inet_ntoa(sin_addr); 
	} 
	USHORT Port() const{ 
		//获取端口号 
		return ntohs(sin_port); 
	} 
	ULONG IPAddr() const{ 
		//获取地址 
		return ntohl(sin_addr.s_addr); 
	} 
	//对操作符进行重载 
	const CSocketAddress & operator=(const SOCKADDR &sa){ 
		memcpy(this,&sa,sizeof(SOCKADDR)); 
		return *this; 
	} 
	const CSocketAddress & operator=(const SOCKADDR_IN &sin){ 
		memcpy(this,&sin,sizeof(SOCKADDR_IN)); 
		return *this; 
	} 
	operator SOCKADDR(){ 
		return *((LPSOCKADDR)this); 
	} 
	operator LPSOCKADDR(){ 
		return (LPSOCKADDR)this; 
	} 
	operator LPSOCKADDR_IN(){ 
		return (LPSOCKADDR_IN)this; 
	} 
	virtual ~CSocketAddress(); 
 
}; 
 
#endif // !defined(AFX_SOCKETADDRESS_H__CEB408D8_DD0E_43C4_B440_FD60AD0788BD__INCLUDED_)