在 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. C语言 深入学习

    浮点数: x = Mx*2^Ex为一个规格化浮点数,Mx为x的尾数,Ex为x的阶码. 1e-6:表示1 * 10 ^ (-6). 编译时执行: sizeof是运算符(而非函数),在编译时执行,不会导致 ...

  2. 如何用conda安装软件|处理conda安装工具的动态库问题

    conda的确是一个非常好的工具,对于初学者而言,安装软件就跟用XXX软件管理器一样方便.正因为他如此便利,以至于我介绍如何手动安装工具时,总有人问我为啥不用conda. 我用conda,并且用的很好 ...

  3. 使用ajax无法跨源问题总结

    参考文章: 浏览器同源政策及其规避方法 跨域资源共享 CORS 详解 使用jQuery实现跨域提交表单数据 <form action="http://v.juhe.cn/weather ...

  4. Java SE HashMap的底层实现

    1.hash散列算法 由于hashmap在存储过程中是数组加链表的存储过程,所以定义数组长度为16(建议是2的n次幂的长度),之后进行每个数组的地址都指向一个链表进行存储 hash表算法可对数组长度l ...

  5. hibernate事务规范写法

    @Test public void testTx() { SessionFactory sessionFactory = null; Session session = null; Transacti ...

  6. 兼容低版本 ie 的思路

    兼容处理 ie 低版本,推荐三条路径: 一.css hack,适用于代码初建阶段,也就是说在开发功能之前要思考的问题点,这里总结几个常见的: 1.- 区分 ie6 与 ie7以上 ( -text-in ...

  7. 在nodejs中的集成虹软人脸识别

    ==虹软官网地址==http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我们 ...

  8. js常见知识点2.面向对象相关

    一.对象的概念 建议回复: 对象是一个整体,对外提供一些功能. 一切具有属性和方法的事物. 一切具有本质特征和行为的物质. 数据类型:       所有的基本数据类型都没有属性和方法.       所 ...

  9. Codeforces 997 C - Sky Full of Stars

    C - Sky Full of Stars 思路: 容斥原理 题解:http://codeforces.com/blog/entry/60357 注意当i > 1 且 j > 1,是同一种 ...

  10. js中use或者using方法

    看Vue.use方法,想起了以前工作中别人用过的use方法. var YANMethod = { using:function() { var a = arguments, o = this, i = ...