在Java中多播不工作
问题描述:
我正在为我的班级开发一些同级2对等应用程序,并且我被告知要让服务器发现对方,他们必须多播到他们的UDP端口1110并监听他们的UDP端口1110。下面的代码就是为了做到这一点。为了测试,我运行了两台发送和接收的服务器。但似乎没有任何工作。你认为我的问题在哪里?在Java中多播不工作
我把2个服务器放在2个不同的文件夹中。并且我将IP地址分配给了我的NIC,例如ifconfig eth0:3 192.168.0.11 netmask 255.255.255.0 up
我应该如何告诉每个服务器有关新的IP地址?
BroadcastListner
class BroadcastListner implements Callable<Object> {
int PORT = 1110;
String IP = "255.255.255.255";
MulticastSocket socket ;
DatagramPacket packet;
InetAddress IPAD;
byte data[] = null ; //////////////change size
int numOfNodes;
BroadcastListner(String IP, int numOfNodes) {
try {
this.numOfNodes = numOfNodes;
this.IP = IP;
IPAD = InetAddress.getByName(IP);
socket = new MulticastSocket(PORT);
packet = new DatagramPacket(data,data.length);
} catch (Exception e) {
e.printStackTrace();
}
}
BroadcastListner(int numOfNodes) {
try{
this.numOfNodes = numOfNodes;
// this.IP = IP;
IPAD = InetAddress.getByName(IP);
socket = new MulticastSocket(PORT);
packet = new DatagramPacket(data,data.length);
} catch (Exception e) {
e.printStackTrace();
}
}
public String call() {
try{
socket.joinGroup(IPAD);
} catch (Exception e) {
e.printStackTrace();
return "";
}
while(true) {
try {
socket.receive(packet);
String str = new String(packet.getData());
System.out.println(" Time signal received from"+
packet.getAddress() + " Time is : " +str);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
//socket.leaveGroup(IPAD);
//socket.close();
//return "";
}
}
BroadcastSender
class BroadcastSender implements Callable<Object> {
int PORT = 1110;
String IP = "255.255.255.255";
MulticastSocket socket;
DatagramPacket packet;
InetAddress IPAD;
byte[] data = "IAmAServer".getBytes();
//int numOfNodes;
String str = "IAmAServer";
BroadcastSender(String IP) {
try {
// this.numOfNodes = numOfNodes;
this.IP = IP;
IPAD = InetAddress.getByName(IP);
socket = new MulticastSocket();
} catch (Exception e) {
e.printStackTrace();
}
}
BroadcastSender() {
try{
// this.numOfNodes = numOfNodes;
// this.IP = IP;
IPAD = InetAddress.getByName(IP);
socket = new MulticastSocket();
} catch (Exception e) {
e.printStackTrace();
}
}
public String call() {
try {
socket.joinGroup(IPAD);
socket.setTimeToLive(10);
} catch (Exception e) {
e.printStackTrace();
return "";
}
while(true) {
try {
Thread.sleep(2000);
packet = new DatagramPacket (data,str.length(),IPAD,PORT);
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
//return "";
}
}
答
你需要尝试192.168.0.255的广播地址
一个替代方案是使用多播,而不是像224.xxx这样的广播地址,它不受特定的子网限制。
+0
我以前没见过使用广播地址。这与使用多播地址相同还是仅限于192.168.0.x子网? – Kevin 2012-02-05 23:02:19
不确定是否还有其他问题,但我认为你的IP是错误的。有一些地址为多播保留。你需要选择其中的一个。例如,224.x.x.x. – Kevin 2012-02-05 16:30:11
要重申@Kevin发布的内容,您不应将网络掩码用作IP地址。 – Perception 2012-02-05 16:56:00