java-Java广播相关问题,我到底应该使用什么广播地址才可以发送广播消息。谢谢

问题描述

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

时间: 2024-08-29 11:28:52

java-Java广播相关问题,我到底应该使用什么广播地址才可以发送广播消息。谢谢的相关文章

[译]Constraint Layout 动画 |动态 Constraint |用 Java 实现的 UI(这到底是什么)[第三部分]

本文讲的是[译]Constraint Layout 动画 |动态 Constraint |用 Java 实现的 UI(这到底是什么)[第三部分], 喔,又是新的一天,是时候学些新东西来让今天变得精彩起来了. 各位读者朋友你们好,希望各位一切顺利.我们之前已经在第一部分和 第二部分 中学习了许多关于 Constraint Layout 的新东西.现在是时候学习这个令人惊讶的布局剩下的部分了.这一篇很有可能是关于 Constraint Layout系列的最后一篇文章了. 动机: 写这篇文章的动机和在

新手java,socket相关问题

问题描述 新手java,socket相关问题 小弟想实现,在客户端点击不同的按钮,会发送不同的信息给服务端,比如点击注册按钮,会将GUI上的相关注册信息发送到服务端再写进数据库:点击登陆按钮,则获取GUI上的账号密码,发送到服务器,再验证登录.就是点击不同的按钮,服务器需要有不同的实现,这该怎么做? 解决方案 你客户端使用 Socket 或者 HTTP,要看服务器端提供什么样的接口?而不是由客户端做选择的. 如果服务器端只有 Socket(TCP) 的接口,也不用考虑其它的实现方式:无法考虑.

java File中 相关path疑问

问题描述 java File中 相关path疑问 File中的 getPath()和 getAbsolutePath(),getCanonicalPath() 有什么区别? 我自己验证是打印出的路径都一样,谁能举例或者能说出区别 ? 非常感谢 D:STSworkspace-stsinvoicingtargettest-classescnhyxiofiletesttest1.hyx.csv D:STSworkspace-stsinvoicingtargettest-classescnhyxiofi

java中static相关问题

问题描述 java中static相关问题 class Bowl { static{ System.out.println("这是Bow3的测试!"); } { System.out.println("这是Bow1的测试!"); } static{ System.out.println("这是Bow4的测试!"); } } 以上类new后输出: 这是Bow3的测试! 这是Bow4的测试! 这是Bow1的测试! 应该是在类编译的时候就已经加载了,那么

【分享】JAVA软件开发相关注册码 myeclipse注册码 + navicat注册码

[分享]JAVA软件开发相关注册码 myeclipse注册码 + navicat注册码 ============================================================== myeclipse 6.01 注册码 Subscriber: www.1cn.biz  Subscriber Code: jLR7ZL-655355-5450755330522962   Subscriber:Administrator  Subscription Code:NLR8Z

java HashSet 赋值相关

问题描述 java HashSet 赋值相关 ArrayList c1 = new ArrayList(); c1.add("a"); c1.add("b"); c1.add("c"); ArrayList c2 = new ArrayList(); c2.add("a"); c2.add("b"); c2.add("d"); ArrayList c3 =new ArrayList();

java swing 表格相关操作

Java swing 表格相关操作 (1)设置表格数据 Java代码   public static void setTableData3(JTable parameterTable_1,Map requestMap,boolean hasTextField,boolean isTF_table_cell,String[]columnNames) {           System.out.println("setTableData3");           int length 

微信支付java版本之JSAPI支付+发送模板消息_java

本文为大家分享了java版本之JSAPI支付+发送模板消息的相关资料,供大家参考,具体内容如下 1.工具类 工具类见:微信支付JAVA版本之Native付款 2.公众账号设置 3.代码实现  openId:openId为用户与该公众账号之间代表用户的唯一标示  以下类中涉及到生成token,关闭订单接口调用,获取配置文件信息,和工具类,在其他文章中有具体代码实现  package com.zhrd.bussinss.platform.controller.rest; import java.io

python-如何 Python转JAVA java将32x32的二进制图像文本矩阵转换成1x1024的向量

问题描述 如何 Python转JAVA java将32x32的二进制图像文本矩阵转换成1x1024的向量 1C #文本向量化 32x32 -> 1x1024def img2vector(filename): returnVect = [] fr = open(filename) for i in range(32): lineStr = fr.readline() for j in range(32): returnVect.append(int(lineStr[j])) return retu