sockaddr_in结构封装类

//目的:封装套接字,可以用来向网络发送、接收数据。阻塞调用函数。
//说明:本类从《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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值