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 //#includeclass 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_)