0
点赞
收藏
分享

微信扫一扫

网络编程基础之---struct sockaddr_in, struct sockaddr, struct in_addr

大柚子top 2022-04-16 阅读 83

结构体

  • struct sockaddr_in
  • struct sockaddr
  • struct in_addr

这三个结构体在网络编程中经常忘记各自的成员,需要临时查阅。

struct sockaddr
{
	/***** 地址族 AF_xxx *****/
	unsigned short sa_family;
	/***** 14字节的协议地址 *****/
	char sa_data[14];
};
struct sockaddr_in
{	
	/***** 地址族 *****/
	short int sin_family;
	/***** 端口号 *****/
	unsigned short int sin_port;
	/***** Internet 地址 *****/
	struct in_addr sin_addr;
	/***** 与 struct sockaddr 一样长度的填充 *****/
	unsigned char sin_zero[8];
};

/***** 32位IP地址 *****/
sturct in_addr
{
	unsinged long s_addr;
};
/***** 也有可能定义为以下 *****/
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_addr为长整形结构
	} S_un;
};

/***
**一般用法如下:
***/
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(MY_PORT);
my_addr.sin_addr.s_addr = inet_addr("192.168.0.1");
bzero(&my_addr.sin_zero,8);
  • inet_addr:将网络地址转为网络二进制数字,返回的IP地址是网络序的。原型为:
unsigned long int inet_addr(const char* ip);
  • inet_aton:将网络地址转为网络二进制数字,与inet_addr的却别是,保存形参inp所指向的in_addr结构体中:
int inet_aton(const char* ip,struct in_addr* sin_addr);
  • inet_ntoa:将网络二进制数字转为网络地址:
char* inet_ntoa(struct in_addr* sin_addr);

升级版的转换函数:

字符串到网络地址

  1. inet_pton
  2. inet_ntop
    后面补充。。。。
举报

相关推荐

0 条评论