草庐IT

Linux 上的 Java : Listening to broadcast messages on a bound local address

我有一个有点奇怪的要求,即能够在Linux机器上从Java监听多个网络接口(interface),并确定其中一个是否接收到某种类型的UDP数据包。我需要的输出数据是相关接口(interface)的IP地址。有没有办法在Java中做到这一点?监听通配符地址(newDatagramSocket(port))没有帮助,因为虽然我确实收到了广播数据包,但我无法确定它们通过的接口(interface)的本地IP地址。在绑定(bind)到某个接口(interface)(newDatagramSocket(端口,地址))时收听广播根本不会收到数据包。这个案例值得一个代码示例来展示我正在尝试做的事情:

Linux 上的 Java : Listening to broadcast messages on a bound local address

我有一个有点奇怪的要求,即能够在Linux机器上从Java监听多个网络接口(interface),并确定其中一个是否接收到某种类型的UDP数据包。我需要的输出数据是相关接口(interface)的IP地址。有没有办法在Java中做到这一点?监听通配符地址(newDatagramSocket(port))没有帮助,因为虽然我确实收到了广播数据包,但我无法确定它们通过的接口(interface)的本地IP地址。在绑定(bind)到某个接口(interface)(newDatagramSocket(端口,地址))时收听广播根本不会收到数据包。这个案例值得一个代码示例来展示我正在尝试做的事情:

c - Linux:将 UDP 监听套接字绑定(bind)到特定接口(interface)(或找出数据报来自的接口(interface))?

我有一个正在处理的守护进程,它监听UDP广播数据包并通过UDP进行响应。当数据包进来时,我想知道数据包来自哪个IP地址(或NIC)至这样我就可以以该IP地址作为源进行响应。(由于涉及很多痛苦的原因,我们系统的一些用户希望将同一台机器上的两个网卡连接到同一个子网。我们告诉他们不要,但他们坚持。我不需要提醒这是多么丑陋.)似乎没有办法检查数据报并直接找出它的目标地址或它进入的接口(interface)。基于大量的谷歌搜索,我发现找出数据报目标的唯一方法是每个接口(interface)有一个监听套接字并将套接字绑定(bind)到它们各自的接口(interface)。首先,我的监听套接字是这样

c - Linux:将 UDP 监听套接字绑定(bind)到特定接口(interface)(或找出数据报来自的接口(interface))?

我有一个正在处理的守护进程,它监听UDP广播数据包并通过UDP进行响应。当数据包进来时,我想知道数据包来自哪个IP地址(或NIC)至这样我就可以以该IP地址作为源进行响应。(由于涉及很多痛苦的原因,我们系统的一些用户希望将同一台机器上的两个网卡连接到同一个子网。我们告诉他们不要,但他们坚持。我不需要提醒这是多么丑陋.)似乎没有办法检查数据报并直接找出它的目标地址或它进入的接口(interface)。基于大量的谷歌搜索,我发现找出数据报目标的唯一方法是每个接口(interface)有一个监听套接字并将套接字绑定(bind)到它们各自的接口(interface)。首先,我的监听套接字是这样

c - 如何每 1 毫秒发送一次 UDP 数据包?

我需要为Linux编写一个应用程序来定期发送UDP数据包。理想情况下,频率应为每1毫秒一次,并且数据包之间的间隔应保持一致。我试过用这种方式通过普通套接字来做到这一点:while(counter在上面的应用程序中,我只是用一个计数器值填充UDP数据包,所以我可以在接收端区分它们。基本上这段代码完成了它的工作,但是有这些问题:1.频率不够高,受主机性能和其他应用程序影响很大。2.包间隔不一致,因为有RTC作为引用。但是,如果我尝试进行RTC检查,这会使数据包速率变得更慢。我认为应该有更优雅的方式来通过不同的方法实现我的目标。请多多指教。 最佳答案

c - 如何每 1 毫秒发送一次 UDP 数据包?

我需要为Linux编写一个应用程序来定期发送UDP数据包。理想情况下,频率应为每1毫秒一次,并且数据包之间的间隔应保持一致。我试过用这种方式通过普通套接字来做到这一点:while(counter在上面的应用程序中,我只是用一个计数器值填充UDP数据包,所以我可以在接收端区分它们。基本上这段代码完成了它的工作,但是有这些问题:1.频率不够高,受主机性能和其他应用程序影响很大。2.包间隔不一致,因为有RTC作为引用。但是,如果我尝试进行RTC检查,这会使数据包速率变得更慢。我认为应该有更优雅的方式来通过不同的方法实现我的目标。请多多指教。 最佳答案

c++ - 当 UDP header 校验和不正确时,UDP 数据包是否被丢弃?

如果我打开一个原始套接字,并发送带有错误校验和的udp数据包,数据包是否会被tcp/ip堆栈另一端丢弃? 最佳答案 是的,它们会被丢弃。如果您需要更可靠的通信,最好使用TCP。有关更多信息,请查看:http://www.diffen.com/difference/TCP_vs_UDPUDP甚至不能保证数据包会被发送,更不用说接收了。但是,如果它们实际上已收到,则会对其进行检查。如果它们未通过校验和,它们将被丢弃。编辑:此外,udp默认情况下不会在发送数据包时对数据包进行排序,这必须在应用程序级别完成。如果您仍然打算使用UDP,请记住

c++ - 当 UDP header 校验和不正确时,UDP 数据包是否被丢弃?

如果我打开一个原始套接字,并发送带有错误校验和的udp数据包,数据包是否会被tcp/ip堆栈另一端丢弃? 最佳答案 是的,它们会被丢弃。如果您需要更可靠的通信,最好使用TCP。有关更多信息,请查看:http://www.diffen.com/difference/TCP_vs_UDPUDP甚至不能保证数据包会被发送,更不用说接收了。但是,如果它们实际上已收到,则会对其进行检查。如果它们未通过校验和,它们将被丢弃。编辑:此外,udp默认情况下不会在发送数据包时对数据包进行排序,这必须在应用程序级别完成。如果您仍然打算使用UDP,请记住

c - 为什么第一个客户端看到源 ip 为 0.0.0.0?

我在linux上有一个client.cserver.c。在两者上我都初始化了一个套接字:sockfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)在我添加的服务器中:listen_addr.sin_family=AF_INET;listen_addr.sin_port=htons(port);listen_adrr.sin_addr.s_addr=htonl(INADDR_ANY);server.c调用(阻塞方式)到recvform:if(recvfrom(sockfd,buf_get,BUFLEN,0,(structsockaddr*)&talker_

c - 为什么第一个客户端看到源 ip 为 0.0.0.0?

我在linux上有一个client.cserver.c。在两者上我都初始化了一个套接字:sockfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)在我添加的服务器中:listen_addr.sin_family=AF_INET;listen_addr.sin_port=htons(port);listen_adrr.sin_addr.s_addr=htonl(INADDR_ANY);server.c调用(阻塞方式)到recvform:if(recvfrom(sockfd,buf_get,BUFLEN,0,(structsockaddr*)&talker_