网上查询关于JAVA广播的问题,关于广播地址有一些问题。有的人说广播地址是D类地址,有人说广播地址是当前ip地址最后一位换成255,有人说广播地址是全部为255的地址,现在测试结果如果全部是255在本机发送广播本机可以收到,其他的D类地址无法收到TTL已经设置为128,最后一个换成255的会被MultiScoketCast抛出不是多播地址的异常。请问他们之间有什么区别和联系各个的用法又是如何。
现在问题:我当前ip地址10.13.242.116.使用相关类MulticastSocket。测试结果:
当我使用D类地址进行广播,可以发送但是无法接收。设置可以发回本机,本机无法收到广播包。其他机器也无法收到广播包。其他机器均为10.13.*.*
当我使用本机地址最后一个字节全部变为255的时候例如:10.13.242.255此时抛出此地址不是广播地址的异常,无法发送。
当我使用全1的地址发送广播的时候例如:255.255.255.255此时本机可以收到广播包但是其他机器无法收到广播包.不知道为什么.谢谢各位的帮助.下面贴出我的最后一种实验的代码.
发送者
`import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.sql.Date;
public class MulticastSender extends Thread {
private int port = 9898;
private InetAddress ipaAddress = null;
MulticastSocket msocket;
MulticastSender(){
try {
ipaAddress = InetAddress.getByName("255.255.255.255");
msocket = new MulticastSocket(port);
msocket.setBroadcast(true);
msocket.setTimeToLive(1);
msocket.joinGroup(ipaAddress);
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void run(){
while(true)
try {
String string="Hello";
byte [] buf = string.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(buf, 0, buf.length, ipaAddress, port);
System.out.println("发送数据");
msocket.send(datagramPacket);
System.out.println("发送成功");
Thread.sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) throws Exception {
MulticastSender msMulticastSender = new MulticastSender();
msMulticastSender.start();
}
} `
接受者
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;
public class MulticastReciever extends Thread{
private int port = 9898;
private InetAddress ipgroupAddress =null;
private MulticastSocket msMulticastSocket = null;
DatagramPacket datagramPacket = null;
MulticastReciever(){
try {
msMulticastSocket = new MulticastSocket(port);
//ipgroupAddress = InetAddress.getByName("10.13.255.255");
//msMulticastSocket.joinGroup(ipgroupAddress);
byte[] data = new byte[4096];
datagramPacket = new DatagramPacket(data, data.length);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run(){
try {
while (true) {
msMulticastSocket.receive(datagramPacket);
System.out.println("接收到数据"+new String(datagramPacket.getData()));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
MulticastReciever multicastReciever = new MulticastReciever();
multicastReciever.start();
}
}
这种情况下我本机可以收到广播内容,但是其他机器10.13.*.*无法收到广播包。谢谢