udp中recvfrom获取发送方的地址IPport
Posted 毛毛虫的爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了udp中recvfrom获取发送方的地址IPport相关的知识,希望对你有一定的参考价值。
struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。
一、sockaddr
sockaddr在头文件#include <sys/socket.h>
中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下:
二、sockaddr_in
sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>
中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下:
sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。
三、总结
二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。
sockaddr_in from;int len;
len = sizeof(struct sockaddr);
RecvNum=recvfrom(sock,RecvBuf,1500,0,(sockaddr*)&from,&len);
printf("IP:%s\\n", (char *)inet_ntoa(from.sin_addr));
printf("Port:%d\\n", htons(from.sin_port));
以上是关于udp中recvfrom获取发送方的地址IPport的主要内容,如果未能解决你的问题,请参考以下文章
recvfrom() 即使是第一次调用中的 UDP 消息,也不会填充来自 IP 地址
udp的recvfrom函数,能接收指定ip和端口发送来的数据吗?