struct sockaddr、sockaddr_in

结构
sockaddr
sockaddr_in
in_addr

函数
inet_ntoa
inet_addr
htons
htonl
ntohs
ntohl

struct sockaddr
{
  u_short sa_family;
  char sa_data[14];
};

sockaddr是通用IP地址的结构,sa_data中的数据含义要看sa_family说明的协议类型是什么,
sockaddr的内容是网络字节顺序(big-endian)
struct sockaddr_in
{
   short sin_family;
   unsigned short sin_port;
   struct in_addr sin_addr;
   char sin_zero[8];
};

sin_family在sockaddr可以转换成sockaddr_in来用,端点地址,必须是AF_INET。
在sockaddr的sin_addr是一个in_addr结构,来说明ip地址,
struct in_addr 
{
   union
  {
      struct{u_char s_b1,s_b2, s_b3, s_b4;} S_un_b;
      struct{ u_short s_w1,s_w2; } S_un_w;  
      u_long  S_addr; 
  }S_un;
};

S_un_b    Address of the host formatted as four u_chars .
S_un_w   Address of the host formatted as two u_shorts .
S_addr    Address of the host formatted as u_long

使用函数 char FAR* inet_ntoa (struct in_addr  in); 可以将in_addr结构的地址装为字符串的ip地址,形如:192.16.1.1
使用函数 unsigned long inet_addr ( const char FAR*  ip);可以将字符串形式的ip地址转换成in_addr结构形式的地址

  例子:

  int   sockfd;  
  struct   sockaddr_in   my_addr;                                  //定义一个端口地址
  sockfd   =   socket(AF_INET,   SOCK_STREAM,   0);     //创建套接字
   
  my_addr.sin_family   =   AF_INET;                              //必须是
  my_addr.sin_port   =   htons(MYPORT);                      //使用htons把计算机字节顺序转换成网络字节顺序
  my_addr.sin_addr.s_addr   =   inet_addr("192.168.0.1");  //
 
  ZeroMemory(&(my_addr.sin_zero),   8);     //最后8个必须字节为0
    
  bind(sockfd,   (struct   sockaddr   *)&my_addr,   sizeof(struct   sockaddr));

u_short htons(u_short netshort);  // h ost to n et  s hort  计算机的u_short字节顺序转换为网络的字节顺序
u_short htonl(u_short netlong); // host to net  long  计算机的u_long字节顺序转换为网络的字节顺序
u_long ntohl(u_long  netlong); // net to host long  网络的字节的u_long字节顺序转换为计算机的字节顺序
u_short ntohs(u_short netshort); // net to host short  网络的字节的u_short字节顺序转换为计算机的字节顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值