java 中多播、广播编程
在 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 中多播、广播编程的更多相关文章
- 第62节:探索Java中的网络编程技术
前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
- 读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- 读懂Java中的Socket编程(转)
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- Java 中的函数式编程(Functional Programming):Lambda 初识
Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...
- 第84节:Java中的网络编程(中)
第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...
- 第78节:Java中的网络编程(上)
第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...
- Java中的 多线程编程
Java 中的多线程编程 一.多线程的优缺点 多线程的优点: 1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快 多线程的代价: 1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序 ...
- java中的socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- Java中的函数式编程(三)lambda表达式
写在前面 lambda表达式是一个匿名函数.在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架. lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物 ...
随机推荐
- 安装Windows10系统注意事项
硬盘的AHCI开启: 报错解决:将Secure Boot 设置为Disabled win10系统下载地址:ed2k://|file|cn_windows_10_multi-edition_versi ...
- 使用openpyxl实现excel文件的读取操作
1.环境准备 python3环境.安装openpyxl模块 2.excel文件数据准备 3.为方便直接调用,本代码直接封装成类 from openpyxl import load_workbook c ...
- [原][粒子特效][spark]发射器emitter
深入浅出spark粒子特效连接:https://www.cnblogs.com/lyggqm/p/9956344.html group添加emitter的方式: eimtter: 上图是spark源码 ...
- 在vscode中,自定义代码片段,例vue组件的模板
1---- 2---- 输入vue, 选 vue.json 3---- 在vue.json中编辑, 有说明 a. tab符,要用空格, 也可以转义 4---- 新建vue文件, 输入自定义 ...
- StringBuilderWriter 这个类需要commons.io.2.6这个包才可以使用, 在maven仓库中搜
- 力扣(LeetCode) 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
- SQL左右连接中的on and和on where的区别
SQL左右连接中的on and和on where的区别 左联时,ON后面的对左边表的条件对左边表数据无影响(因为左连接符合左边所有条件),但对右边表数据有影响,只有符合左边表条件时,右边表数据才会查出 ...
- selenium+Page Objects(第二话)
前面介绍了什么是po模式,并且简单分析了一下使用po模式编写脚本的思路,接下来开始正式编写 1.先编写一个页面基类BasePage.py,里面封装每个页面常用的一些方法 # coding: utf-8 ...
- C# 连接PDA扫码枪
Symbol扫码枪开发文档 一.主要功能 实现symbol扫码枪和PC数据交互. 二.运行环境 SymbolMC32NO 三.开发工具与软件 开发环境:Win7 开发语言:C# 数据库:Sql Ser ...
- 20165303 2017-2017-2《Java程序设计》课程总结
1.我期待的师生关系 20165303我期望的师生关系 2.学习基础和C语言基础调查 20165303学习基础和C语言基础调查 3.linux安装及学习 20165303 预备作业3 Linux安装及 ...