Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何诊断java IP多播应用程序?_Java_Linux_Sockets_Networking_Multicast - Fatal编程技术网

如何诊断java IP多播应用程序?

如何诊断java IP多播应用程序?,java,linux,sockets,networking,multicast,Java,Linux,Sockets,Networking,Multicast,出于某种原因,我在运行OpenSUSE Linux的计算机上运行的每个多播示例都可以工作。客户们都静静地坐着。如何找出阻止/忽略多播的原因 其中一些例子: 例1 例2 使用以下文件: http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServerThread.java http://docs.oracle.com/javase/tutorial/networking/datagrams/e

出于某种原因,我在运行OpenSUSE Linux的计算机上运行的每个多播示例都可以工作。客户们都静静地坐着。如何找出阻止/忽略多播的原因

其中一些例子:

例1 例2 使用以下文件: http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServerThread.java
http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/one-liners.txt

在对IP多播进行故障排除时,您可以做一些重要的事情来确定这是主机问题、软件问题还是网络问题:

步骤1:确保接收器在正确的接口上发送IGMP组联接。在接收方接口上查找多播源的通信量。 步骤2:确保服务器在正确的多播组上通过正确的接口发送流量 步骤3:使用linux的socat工具对IP多播执行类似ping的测试 每个步骤的详细信息概述如下

第一步 首先,确保linux多播接收器正确地公布其组成员报告;请记住,多播中的许多内容都是从单播向后工作的。例如,多播要求您发送包含您想要接收的多播组的IGMP加入数据包

使用tcpdump或tshark检查有问题的接口。。。在下面的示例中,我在192.168.12.238上有一台机器,它通过igmp宣布希望从239.255.0.1接收多播流量

如果您看到发送到适当多播组的通信量,则直接进入步骤3;否则,请转至步骤2

步骤2 接下来,确保您的多播服务器正在将流量发送到正确的组。在下面的示例中,我运行一个命令来嗅探发送到239.255.0.1的流量的eth0

如果多播源在步骤2中向正确的组发送通信量,您在步骤1中看到IGMP组加入,而步骤1在多播接收器的接口上没有看到通信量,请联系您的网络管理员以了解此问题

步骤3 假设所有这些都有效,并且您仍然需要一个acid测试,以防您的多播接收器软件以某种方式丢弃它从IP堆栈接收的多播。。。确保您的机器上安装了socat,并执行以下操作

在多播发送方服务器上,使用此命令将测试多播数据包发送到239.255.0.1:

在多播接收器客户端上,使用此命令侦听发送到eth0上239.255.0.1的测试多播数据包:

假设您的网络管理员允许在239.255.0.1上进行多播,您将在多播接收器的终端窗口中看到大量类似的流量:

hi number 212289
hi number 212290
hi number 212291
hi number 212292
hi number 212293
hi number 212294
hi number 212295
hi number 212296
hi number 212297
hi number 212298
注意:请不要使用网络上已在生产中使用的多播组地址尝试此操作

步骤4 如果步骤1、2和3显示正在通过您的网络发送和接收多播流量,请致电软件开发人员,告诉他们您认为应用程序存在问题,并解释您迄今为止采取的步骤

如果步骤1、2或3不起作用,请重新配置软件/主机/网络,直到它们起作用为止。警告,IP网络中的多播比IP单播更难正确实现3倍


祝你好运…

有一个防火墙阻止了多播。打开一个端口,它就工作了

如何检查多播

当集群中断时,可能是由于多种原因造成的。其中之一是多播,应用程序订阅某个IP地址并侦听消息。如果用户发现自己间歇性注销,这可能表明存在此类问题

多播IP地址的范围为224.0.0.0至239.255.255.255。 这篇文章只是提醒我linux级别的检查应该做什么:

运行netstat-g以获取此主机订阅的多播地址

注:在RefCnt列中,它显示了属于组239.128.4.0的2个成员

ping此多播地址将显示哪些成员订阅了组或群集:

JGroup

测试多播的一个好方法是使用jgroups。看见 下载jgroups-3.3.3.Final.jar

启动接收器: 启动发件人并键入以下内容: 该消息显示在“收件人”窗口中,并显示发件人:


请将相关代码张贴在您的问题正文中。谢谢!我发现了答案:防火墙正在阻止它facepalm:哦,好吧,这种事情发生了。。。事实上,这正是我发布我所做的事情的原因。。。网络是IP多播的一个重要组成部分。是的,我非常感谢你非常透彻和有用的回答,它帮助我走上了正确的道路。谢谢这些程序对我诊断多播非常有帮助。然而,这个问题让我感到困惑,我希望能得到一些建议:@BrianAgnew,你应该想想他是怎么做的
发现是他的防火墙;-。还记得这个问题吗,我如何找出多播被阻止/忽略的原因?@BrianAgnew是的,MikePennington提出了一个很好的观点。对于更多有多播问题的人来说,遵循他的anser将更有用,anser是通向答案的一系列步骤
sudo tshark -n -i eth0 ip and host 239.255.0.1
[mpenning@hotcoffee Models]$ sudo tshark -n -i eth0 ip and host 239.255.0.1

1.466991 192.168.12.236 -> 239.255.0.1  UDP Source port: 11111  Destination port: 11111
perl -e '$ii=0; while (1) { print "hi number $ii\n"; $ii++; }' | socat - UDP-SENDTO:239.255.0.1:11111,sp=11111
socat - UDP-DATAGRAM:239.255.0.1:11111,bind=:11111,ip-add-membership=239.255.0.1:eth0
hi number 212289
hi number 212290
hi number 212291
hi number 212292
hi number 212293
hi number 212294
hi number 212295
hi number 212296
hi number 212297
hi number 212298
[root@bruatwls001 ~]$ netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            2      239.128.4.0
eth0            1      all-systems.mcast.net
[root@bruatwls001 ~]$ ping 239.128.4.0
PING 239.128.4.0 (239.128.4.0) 56(84) bytes of data.
64 bytes from 10.35.8.12: icmp_seq=0 ttl=64 time=0.032 ms
64 bytes from 10.35.8.13: icmp_seq=0 ttl=64 time=0.207 ms (DUP!)
64 bytes from 10.35.8.12: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 10.35.8.13: icmp_seq=1 ttl=64 time=0.193 ms (DUP!)
64 bytes from 10.35.8.12: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from 10.35.8.13: icmp_seq=2 ttl=64 time=0.241 ms (DUP!)
[quick@laptop]$ java -cp jgroups-3.3.3.Final.jar org.jgroups.tests.McastReceiverTest -mcast_addr 231.12.21.132 -port 45566
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/fe80:0:0:0:201:4aff:fe5e:5331%2
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/192.168.1.5
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/0:0:0:0:0:0:0:1%1
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/127.0.0.1
 [quick@centos ~]$ java -cp jgroups-3.3.3.Final.jar org.jgroups.tests.McastSenderTest -mcast_addr 231.12.21.132 -port 45566
Socket #1=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:fc54:ff:fedc:d6da%7  
Socket #2=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:21d:7dff:fe03:4cf5%2  
Socket #7=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/192.168.122.1  
Socket #8=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:21d:7dff:fe03:4cf5%2  
Socket #9=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:21d:7dff:fe03:4cf5%3  
Socket #10=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/0:0:0:0:0:0:0:1%1  
Socket #11=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/127.0.0.1  
> helloworld  
> quit
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]