Java 多播套接字未发送数据
Java Multicast Socket not sending out data
这是我的第一个 post 所以它可能不太时尚,但我试过了......
所以...我有两台机器,都是运行ning Java。我希望他们 运行 像这样。
客户端:向监听服务器发送组播。
服务器:服务器捕获多播并发送回单播,其中包含服务器 运行s 所在的本地机器的名称。
客户端:接收带有服务器地址的单播,并用它们的主机名制作一个列表。
但是客户端甚至不发送组播(我在看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();
ecle 对以下 post 的回应的评论帮助我解决了类似的问题: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"));
这是我的第一个 post 所以它可能不太时尚,但我试过了...... 所以...我有两台机器,都是运行ning Java。我希望他们 运行 像这样。
客户端:向监听服务器发送组播。 服务器:服务器捕获多播并发送回单播,其中包含服务器 运行s 所在的本地机器的名称。 客户端:接收带有服务器地址的单播,并用它们的主机名制作一个列表。
但是客户端甚至不发送组播(我在看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();
ecle 对以下 post 的回应的评论帮助我解决了类似的问题: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"));