2 chen735250065 chen735250065 于 2013.07.05 12:12 提问

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.*.*无法收到广播包。谢谢

Csdn user default icon
上传中...
上传图片
插入图片