Linux编程4.7 网络编程-套接字与地址

1、因特网地址结构

struct in_addr{
	in_addr_t s_addr;             /*ipv4地址*/
}

struct sockaaddr_in{
	short int sin_family;          /*Internet地址族,如AF_INET(主机字节序)*/ 
	unsigned short int sin_port;   /*端口号,16位值 (网络字节序)*/
	struct in_addr sing_addr;      /*Internet地址,32伴IPV4地址(网络字节序)*/
	unsigned char sin_zero[8];     /*添0(为了格式对齐的填充位)*/
}

这两个数据类型是等效的,可以相互转换,通常使用sockaddr_in更为方便。
在这里插入图片描述

2、IPV4地址族和字符地址间的转换

#include <arpa/inet.h>

const char *inet_ntop(int domain, const void *restrict addr,char *restrict str, socklen_t size);
返回:成功返回地址字符串指针,出错返回NULL
功能:网络字长离换成点分十进制

int inet_pton(int domain, const void *restrict str,char *restrict addr);
返回:成功返回1,无效格式返回0,出错返回-1
功能:点分十进制转换为网络字节序

参数:

  • domain:Internet地址族,如AF_INET
  • addr:Internet地址,32位IPV4地址(网络字节序)
  • str:地址字符串(点分十进制)指针
  • size:地址字符串大小

示例:
Internet
在这里插入图片描述

3、套接字与地址绑定

3.1、绑定地址
int bind(int sockfd,const struct sockaddr *addr,socklen_t len);
返回:成功返回0,出错返回-1

在这里插入图片描述

3.2、查找绑定到套按字的地址
#include<sys/socket.h>

int getsockname(int sockfd, struct sockaddr *restrict addr,socklen_t* restrict alenp);
返回:成功返回0,出错返回-1

在这里插入图片描述

3.3、获取对方地址
#include <sys/socket.h>

int getpeername(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);
返回:成功返回0,出错返回-1

二者区别:

  • getpeername只有在连接建立以后才调用,否则不能正确获得对方地址和端口,所以它的参数描述字一般是已连接描述字而非监听套接口描述字。
  • 没有连接的UDP不能调用getpeername,但是可以调用getsockname和TCP一样,它的地址和端口不是在调用socket就指定了,而是在第一次调用sendto函数以后。
  • 已经连接的UDP,在调用connect以后,这2个函数(getsockname,getpeername)都是可以用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值