Chinaunix首页 | 论坛 | 博客

tt

  • 博客访问: 9949
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-13 15:06
文章分类

全部博文(18)

文章存档

2015年(18)

我的朋友

分类: 网络与安全

2015-08-19 21:58:17

sockaddr_in(在netinet/in.h中定义):
struct sockaddr_in {
short int sin_family;                      /* Address family */
unsigned short int sin_port;       /* Port number */
struct in_addr sin_addr;              /* Internet address */
unsigned char sin_zero[8];         /* Same size as struct sockaddr */
};
struct in_addr {
unsigned long s_addr;
};

typedef struct in_addr {
union {
            struct{
                        unsigned char s_b1,
                        s_b2,
                        s_b3,
                        s_b4;
                        } S_un_b;
           struct {
                        unsigned short s_w1,
                        s_w2;
                        } S_un_w;
            unsigned long S_addr;
          } S_un;
} IN_ADDR;

 

 

sin_family指代协议族,在socket编程中只能是AF_INET
       sin_port存储端口号(使用网络字节顺序)
       sin_addr存储IP地址,使用in_addr这个数据结构
       sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
       s_addr按照网络字节顺序存储IP地址

sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向
       sockadd的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,
       在最后用进行类型转换就可以了bzero((char*)&mysock,sizeof(mysock));//初始化
       mysock结构体名
       mysock.sa_family=AF_INET;
       mysock.sin_addr.s_addr=inet_addr("192.168.0.1");
       ……
       等到要做转换的时候用:
       (struct sockaddr*)mysock

附录:struct in_addr

IP结构体的使用。
struct in_addr {

union {   

struct {     

u_char s_b1,s_b2,s_b3,s_b4;   

} S_un_b;      //An IPv4 address formatted as four u_chars.  

struct {     

u_short s_w1,s_w2;   

} S_un_w;   //An IPv4 address formatted as two u_shorts

u_long S_addr; //An IPv4 address formatted as a u_long

} S_un;

};

#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
    in_addr addr;
    addr.S_un.S_un_b.s_b1 = 222;
    addr.S_un.S_un_b.s_b2 = 205;
    addr.S_un.S_un_b.s_b3 = 41;
    addr.S_un.S_un_b.s_b4 = 160;
    printf("%s\n", inet_ntoa(addr)); //222.205.41.160
    in_addr addr1;
    addr1.S_un.S_un_w.s_w1 = htons((222 << 8) + 205);
    addr1.S_un.S_un_w.s_w2 = htons((41 << 8) + 161);
    printf("%s\n", inet_ntoa(addr1)); //222.205.41.161
    in_addr addr2;
    addr2.S_un.S_addr = htonl((((((222 << 8) + 205) << 8) + 41) << 8) + 162);
    printf("%s\n", inet_ntoa(addr2)); //222.205.41.162
}



阅读(153) | 评论(0) | 转发(0) |
0

上一篇:消息映射

下一篇:socket中服务器代码

给主人留下些什么吧!~~