CSDN博客

img fsxdxh

sockaddr_in结构封装类

发表于2004/6/30 22:02:00  2474人阅读

分类: 网络开发

//目的:封装套接字,可以用来向网络发送、接收数据。阻塞调用函数。
//说明:本类从《VC++6.0技术内幕》中摘录并修改

#if !defined(_SOCKET_H)
#define _SOCKET_H

#include
#pragma comment(lib, "ws2_32.lib")


class CSockAddr : public sockaddr_in
{
public:
 //构造函数
 CSockAddr()
  { sin_family = AF_INET;
    sin_port = 0;
    sin_addr.s_addr = 0; } // Default
 CSockAddr(const SOCKADDR& sa) { memcpy(this, &sa, sizeof(SOCKADDR)); }
 CSockAddr(const SOCKADDR_IN& sin) { memcpy(this, &sin, sizeof(SOCKADDR_IN)); }
 //ulAddr为INADDR_ANY时默认为本机任一IP
 CSockAddr(const ULONG ulAddr, const USHORT ushPort = 0) // parms are host byte ordered
  { sin_family = AF_INET;
    sin_port = htons(ushPort);
       sin_addr.s_addr = htonl(ulAddr); }
 CSockAddr(const char* pchIP, const USHORT ushPort = 0) // dotted IP addr string
  { sin_family = AF_INET;
    sin_port = htons(ushPort);
    sin_addr.s_addr = inet_addr(pchIP); } // already network byte ordered
 
 //以点的格式返回地址
 LPCTSTR GetIPDottedDecimal()
  {
      return inet_ntoa(sin_addr);
  }
 //获取端口及地址(主机顺序)
 USHORT Port() const
  { return ntohs(sin_port); }
 //获取IP地址(主机顺序)
 ULONG IPAddr() const
  { return ntohl(sin_addr.s_addr); }
 
 //转换及赋值
 const CSockAddr& operator=(const SOCKADDR& sa)
  { memcpy(this, &sa, sizeof(SOCKADDR));
    return *this; }
 const CSockAddr& 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; }
};

0 0

相关博文

我的热门文章

img
取 消
img