sockaddr_in结构封装类

原创 2004年06月30日 22:02:00

//目的:封装套接字,可以用来向网络发送、接收数据。阻塞调用函数。
//说明:本类从《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; }
};

sockaddr_in结构体详解

sockaddr_in(在netinet/in.h中定义): struct sockaddr_in { short int sin_family;                      /* ...
  • renchunlin66
  • renchunlin66
  • 2016年08月29日 11:52
  • 2116

SOCKADDR_IN结构体的作用是:定义“地方”,宣誓主权

套接字也创建了,总得要为套接字安排个地方吧,SOCKADDR_IN结构体就的作用就是定义“地方”,宣誓对这个“地方”拥有主权,比如下列用法: addrSrv.sin_family = AF_INET...
  • stpeace
  • stpeace
  • 2013年10月28日 23:07
  • 4626

SOCKADDR_IN结构

sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。 sin_addr是一个联合体,用联合体就可以使用多种方式表示IP地址。一般我们使用其中的最后一种方式,即用无符号长整型数据...
  • dgergeg
  • dgergeg
  • 2015年12月11日 10:16
  • 224

sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系

转自:http://keendawn.blog.163.com/blog/static/88880743201241111620289/ struct sockaddr { unsigned shor...
  • li4850729
  • li4850729
  • 2012年06月18日 16:41
  • 3109

struct_sockaddr与struct_sockaddr_in

数据结构一: struct sockaddr { unsigned short sa_family;     /* address family, AF_xxx */ char sa_data[...
  • youhaipeng
  • youhaipeng
  • 2012年05月07日 20:25
  • 1842

sockaddr_in 结构

sockaddr_in   =   record         case   Integer   of             0:   (sin_family:   u_short;       ...
  • god00
  • god00
  • 2011年02月27日 16:04
  • 419

sockaddr结构与sockaddr_in结构

struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14...
  • wanghaobo920
  • wanghaobo920
  • 2012年09月28日 20:10
  • 221

socket :sockaddr_in 赋值

sockaddr_in addr; UpdateData(TRUE); //m_ipAddr.GetAddress() //DWORD b = htonl(m_IP);//普通的DWORD 类型...
  • qqIM123
  • qqIM123
  • 2016年08月30日 10:42
  • 878

sockaddr和sockaddr_in的异同

sockaddr结构体 struct sockaddr { unsigned short sa_family; // 地址族, AF_xxx char sa_data[14]; //14字节...
  • sinat_26448309
  • sinat_26448309
  • 2017年07月26日 09:58
  • 122

socket编程总结(三) struct sockaddr_in /struct sockaddr_in6/struct addrinfo 结构体

ntohs, ntohl, htons,htonl 的比较和详解         在 C/C++ 写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。       这时就可能用到 htons(...
  • u011146511
  • u011146511
  • 2016年07月12日 10:48
  • 2169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sockaddr_in结构封装类
举报原因:
原因补充:

(最多只允许输入30个字)