这是我的第一篇文章所以它可能没有很好的风格,但我试过...... 所以...我有两台机器,都运行Java。我希望他们能够运行这样的东西。
客户端:向侦听服务器发送多播。 服务器:服务器捕获多播并发送一个单播,其名称为服务器运行的本地计算机。 客户端:通过服务器地址接收单播,并使用其主机名创建一个列表。
但客户端甚至没有发送多播(我正在观看wireshark捕获数据包) 当我将230.0.0.1作为多播地址时,它只发送一些东西,但是,服务器没有收到数据包。
编辑:当我向服务器发送单播数据包时,它的响应很好。
这是我的代码:
try
{
//The client runs on LeJOS EV3 so I used their classes a bit
LCDOutputStream lcd = new LCDOutputStream();
PrintStream p = new PrintStream(lcd);
while(true)
{
if(Button.waitForAnyPress() == Button.ID_ESCAPE)
{
break;
}
byte[] buf = this.writeString("get_ip");
DatagramSocket sender = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("230.0.0.1"), 5555);
sender.send(packet);
sender.close();
p.println("Sent Multicast");
}
p.close();
lcd.close();
}
catch(Exception e)
{
console.printException(e);
}
这是服务器代码:
MulticastSocket s = new MulticastSocket(5555);
s.joinGroup(InetAddress.getByName("225.1.1.1"));
while(true)
{
try
{
/*
* 225.1.100.1
*
DataSender.Impl.reply("225.1.100.1", 5555, InetAddress.getLocalHost().getHostName(), "get_ip");*/
byte[] buf = new byte[256];
DatagramPacket p = new DatagramPacket(buf, buf.length);
s.receive(p);
System.out.println("DEBUG: received request");
}
catch(IOException e)
{
e.printStackTrace();
break;
}
}
s.close();
答案 0 :(得分:0)
ecle 在回复以下帖子时所做的评论帮助我解决了类似的问题:Java Multicast sample program is unable to deliver packets within LAN (across hosts)。就我而言,添加setInterface(<server address>);
有效。例如:
MulticastSocket s = new MulticastSocket(5555);
s.setInterface(<server address>);
s.joinGroup(InetAddress.getByName("225.1.1.1"));