在 IP 协议层,有多播、广播的概念。IP 地址分为网络地址和主机地址,主机地址全部为1,就是广播地址。多播使用 D 类地址,从 224.0.0.0 到 239.255.255.255。IP 多播需要 IGMP 的支持,大致是,需要接收多播的主机先向路由器进行注册,然后路由器在收到多播包后会转发给注册的主机。

java 语言实现多播、广播要用到 MulticastSocket,DatagramSocket。

多播发送:

package com.zhang;

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket; public class Multicast_Send {
public static void main(String[] args) {
String[] message = { "hello", "hi" };
int port = 1234; // 端口
InetAddress group = null; // 地址
MulticastSocket multicastSocket = null; // 组播套接字 try {
group = InetAddress.getByName("239.1.1.1"); // 设置多播地址
multicastSocket = new MulticastSocket(port);
// 设置数据包的ttl,值从0到255,应该是和ip包的ttl字段对应上了
// 之前设置为1,在无限局域网中,数据包无法到达其他主机,所以这里设为2
// 如果设为0,则只能发送给本机
multicastSocket.setTimeToLive(2);
multicastSocket.joinGroup(group);
} catch (Exception e) {
e.printStackTrace();
} while (true) {
try {
DatagramPacket packet = null;
for (String msg : message) // 循环发送每条广播信息
{
msg = msg + "," + System.currentTimeMillis();
byte buff[] = msg.getBytes();
packet = new DatagramPacket(buff, buff.length, group, port);
multicastSocket.send(packet);
System.out.println("send:" + msg);
Thread.sleep(2000);
}
} catch (Exception e) {
System.out.println("Error:" + e);
}
} }
}

多播接收:

package com.zhang;

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket; public class Multicast_Recv {
public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("239.1.1.1");
int port = 1234;
MulticastSocket socket = new MulticastSocket(port);
socket.joinGroup(group); while (true) {
byte buff[] = new byte[8192];
DatagramPacket packet = null;
packet = new DatagramPacket(buff, buff.length, group, port);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println("receive:" + message);
}
}
}

广播发送:

package com.zhang;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; public class Broadcast_Send {
public static void main(String[] args) {
// 本机ip:10.3.80.248, 子网掩码:255.255.255.0,推出广播地址:10.3.80.255
String host = "10.3.80.255"; // 广播地址
int port = 9999; // 广播的目的端口
String message = null; // 用于发送的字符串
try {
while (true) {
message = "hello world " + System.currentTimeMillis();
InetAddress addr = InetAddress.getByName(host);
DatagramSocket ds = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(message.getBytes(),
message.length(), addr, port);
ds.send(dp);
Thread.sleep(2000);
// ds.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

广播接收:

package com.zhang;

import java.net.DatagramPacket;
import java.net.DatagramSocket; public class Broadcast_Recv {
public static void main(String[] args) {
int port = 9999; // 开启监听的端口
DatagramSocket ds = null;
DatagramPacket dp = null;
byte[] buf = new byte[1024];// 存储发来的消息
try {
// 绑定端口
ds = new DatagramSocket(port);
dp = new DatagramPacket(buf, buf.length);
System.out.println("监听广播端口打开:"); while (true) {
ds.receive(dp);
System.out.println("收到广播消息:" + new String(buf));
} // ds.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

java 中多播、广播编程的更多相关文章

  1. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  2. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

  3. 读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  4. 读懂Java中的Socket编程(转)

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  5. Java 中的函数式编程(Functional Programming):Lambda 初识

    Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...

  6. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  7. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  8. Java中的 多线程编程

    Java 中的多线程编程 一.多线程的优缺点 多线程的优点: 1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快 多线程的代价: 1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序 ...

  9. java中的socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  10. Java中的函数式编程(三)lambda表达式

    写在前面 lambda表达式是一个匿名函数.在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架.   lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物 ...

随机推荐

  1. jmeter命令行模式运行,实时获取压测结果

    jmeter命令行模式运行,实时获取压测结果 jmeter很小,很快,使用方便,可以在界面运行,可以命令行运行.简单介绍下命令行运行的方式: sh jmeter.sh -n -t my-script. ...

  2. Scala的配置

    Scala基于Java的JVM,所以先检查是否安装JDK. 在官网上下载并安装好了之后,就是配置环境变量了. SCALA_HOME 变量:C:\Program Files (x86)\scala. P ...

  3. <aop:aspect>与<aop:advisor>的区别

    在开发过程中,不少有Spring Aop的使用,在面向切面编程时,我们会使用< aop:aspect>:在进行事务管理时,我们会使用< aop:advisor>.那么,对于&l ...

  4. bean的实例化有几种实现方式

    三种实例化bean的方式   在spring中有三中实例化bean的方式: 一.使用构造器实例化:(90%通常使用的一个方法) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化. 每种实例化 ...

  5. _spellmod_leech_spell

    comment  备注 spell 技能ID,玩家释放该技能时附带吸血效果 meetAura  产生吸血效果需要满足的光环ID,比如做一个空的光环,为寒冰箭吸血光环,则有些光环时候,寒冰箭会附带吸血效 ...

  6. 运行和控制Nginx——命令行参数和信号

    参考资料: Nginx中文文档: http://www.nginx.cn/nginxchscommandline Nginx的启动.停止.平滑重启.信号控制和平滑升级:http://zachary-g ...

  7. Codeforces 600E. Lomsat gelral(Dsu on tree学习)

    题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...

  8. 正则获取 某段 DIV 中 的内容

    string html = "<div class='aa'><div class='left'>324324<div>dsfsdf</div> ...

  9. python+unittet在linux与windows使用的区别

    使用python的unittest编写单元测试框架,批量运行测试用例时,如果使用discover时,windows环境下和linux环境下的代码不一样 Windows环境的run.py代码: case ...

  10. Android开发 打开已存在的项目(以虹软人脸识别sdk的demo为例)

    详细流程参考博客https://blog.csdn.net/z979451341/article/details/79468785 个人遇到的问题与注意点 1.下载Demo后忘记修改appid和sdk ...