s_addr是一个long型的变量,当然可以用random的返回值进行赋值。结构体如下:
typedef 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;
} in_addr;
IP地址本来就是一个32位整数,只不过为了方便记忆和查看,将8位作为一组,每组用10进制数字表示,并且用'.'隔开。比如:0.0.0.3,对应的32位二进制数为:0000000000.....111(前面有29个0),s_addr就是记录这个二进制数的。
struct {u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;
这个是用4个10进制数表示的IP地址,
s_un_b.s_b1=0
s_un_b.s_b2=0
s_un_b.s_b3=0
s_un_b.s_b4=3
就是IP地址"0.0.0.3"了,系统负责将它转换为32位二进制数。
struct {u_short s_w1,s_w2;} S_un_w;
这个是指前16位作为一部分,后面16位作为一个部分。".0.0.0.3"前面16位作为一个部分值为0,后面的部分值为3,所以:
s_un_w.s_w1=0;
s_un_w.s_w2=3;