能否区分收到的一个UDP数据包是不是广播过来的

时间:2021-07-26 00:49:11
我有一个程序,在某个电脑的指定的端口接收UDP数据包,这些数据包可能是专门往这个电脑的端口发的(不妨称为点对点发送),也有可能是通过广播发到这个端口的。请问,采用socket编程接收数据时,有没有办法区分这两种情况?

7 个解决方案

#1


不太清楚。我们项目上发数据都使用带包头的数据包,包头可以自定义一些信息。

#2


IP层检查接收方的IP,看看是否是广播地址

#3


检查udp包的来源地址即可

#4


引用 3 楼 lbm2018 的回复:
检查udp包的来源地址即可

来源不是只能知道对方是谁,还能区分对方是否以广播形式发出?能再详细点吗?

#5


广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。看目的IP地址

#6


在RING3 API上面是没办法区分是广播包,还是普通一对一发的

#7


int recvfrom (
  SOCKET s,                   
  char FAR* buf,              
  int len,                    
  int flags,                  
  struct sockaddr FAR* from,  
  int FAR* fromlen            
);

在from参数,可以得到发送者的地址

#1


不太清楚。我们项目上发数据都使用带包头的数据包,包头可以自定义一些信息。

#2


IP层检查接收方的IP,看看是否是广播地址

#3


检查udp包的来源地址即可

#4


引用 3 楼 lbm2018 的回复:
检查udp包的来源地址即可

来源不是只能知道对方是谁,还能区分对方是否以广播形式发出?能再详细点吗?

#5


广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。看目的IP地址

#6


在RING3 API上面是没办法区分是广播包,还是普通一对一发的

#7


int recvfrom (
  SOCKET s,                   
  char FAR* buf,              
  int len,                    
  int flags,                  
  struct sockaddr FAR* from,  
  int FAR* fromlen            
);

在from参数,可以得到发送者的地址