问题描述
- Java广播相关问题,我到底应该使用什么广播地址才可以发送广播消息。谢谢
-
网上查询关于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.*.*无法收到广播包。谢谢