编写广播数据类

package com.zy.java.service;

import java.io.*;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException; /**
* @author
* @date 2019/7/31 18:32
*/
public class BroadcastService extends Thread {
//获取目录下的二进制文件(.bat)
private String url = System.getProperty("user.dir")+"\\src\\main\\resources\\data";
private String IP = "224.23.55.14";
private int port = 9898;
InetAddress address = null;
MulticastSocket socket = null; public static void main(String[] args) {
BroadcastService service = new BroadcastService();
service.start();
} public BroadcastService() {
// 获取所有可用网卡列表
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
NetworkInterface eth0 = null;
while( interfaces.hasMoreElements() ) {
eth0 = interfaces.nextElement();
if( eth0.getName().equals("eth0") ){
break; // 遍历所有网卡设备,找到自己的目标后,break退出
}
}
try{
// IP:组播地址 String格式
// Port:组播端口 int格式
address = InetAddress.getByName(IP);
socket = new MulticastSocket(port);
socket.setTimeToLive(1);
socket.joinGroup(new InetSocketAddress(address, port), eth0);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void run() {
get16byte();
} public void get16byte(){
File dir = new File(url);
if (!dir.exists()) {
dir.mkdirs();
}
//获取目录下file集合
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
try {
DatagramPacket packet = null;
File binFile = new File(files[i].getPath());
DataInputStream dataIn = new DataInputStream(new FileInputStream(binFile));
StringBuffer hexString = new StringBuffer();
String str = "";
byte temp = 0;
int count = 0;
String counts = null;
for(int j = 0; j < binFile.length(); j++){
temp = dataIn.readByte();
str = Integer.toHexString(temp);
if (str.length() == 8) {
str = str.substring(6);
} else if (str.length() == 1) {
str = "0" + str;
}
hexString.append(str.toUpperCase());
if(hexString.length() % 16 == 0 && j < binFile.length()-1){
count++;
if(count < 10){
counts = "0"+count;
System.out.println(" --- 满16位输出["+counts+"] : "+hexString.toString()+" --- ");
}else{
System.out.println(" --- 满16位输出["+count+"] : "+hexString.toString()+" --- ");
}
byte[] buff = hexStringToByteArray(hexString.toString());
packet = new DatagramPacket(buff, buff.length, address, port);
socket.send(packet);
hexString.delete(0,hexString.length());
sleep(1000);
}
if(j == binFile.length()-1){
System.out.println(" --- 最后输出 : "+hexString.toString()+" --- ");
byte[] buff = hexStringToByteArray(hexString.toString());
packet = new DatagramPacket(buff, buff.length, address, port);
socket.send(packet);
sleep(1000);
}
str="";
}
dataIn.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public byte[] hexStringToByteArray(String hexString){
hexString = hexString.replace(" ","");
int len = hexString.length();
byte[] bytes = new byte[len / 2];
for(int i = 0;i < len; i+= 2){
bytes[i / 2] = (byte)((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i+1), 16));
}
return bytes;
}
}

编写广播接收类

package com.zy.java.service;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException; /**
* @author
* @date 2019/7/30 09:40
*/
//@RestController
public class ListenInService extends JFrame implements Runnable, ActionListener { private static final char HexCharArr[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//端口
private static int port = 9898;
//IP
private static String IP = "224.23.55.14"; private static InetAddress group = null;
//开始按钮
private JButton button_begin;
//结束按钮
private JButton button_stop;
private JTextArea textArea_1;
// private JTextArea textArea_2;
//线程
private Thread thread;
private MulticastSocket socket = null;
private boolean flag = false; public static void main(String[] args) {
ListenInService service = new ListenInService();
service.setVisible(true);
} public ListenInService(){
setTitle("UDP实现接收广播数据报");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(200, 250, 350, 150);
JPanel panel = new JPanel(new FlowLayout());
button_begin = new JButton("开始接收");
panel.add(button_begin);
button_begin.addActionListener(this);
button_stop = new JButton("停止接收");
panel.add(button_stop);
button_stop.addActionListener(this); getContentPane().add(panel, BorderLayout.NORTH); JPanel panel_1 = new JPanel(new GridLayout(1, 2));
textArea_1 = new JTextArea();
textArea_1.setLineWrap(true);
panel_1.add(textArea_1);
/*textArea_2 = new JTextArea();
textArea_2.setLineWrap(true);
panel_1.add(textArea_2);*/ getContentPane().add(panel_1, BorderLayout.CENTER);
thread = new Thread(this);
validate();
try {
group = InetAddress.getByName(IP);
socket = new MulticastSocket(port);
socket.joinGroup(group);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button_begin){
if(!thread.isAlive()){
thread = new Thread(this);
}
thread.start();
flag = false;
}
if(e.getSource() == button_stop){
flag = true;
}
} @Override
public void run() {
String counts = null;
int count = 0;
while(!flag){
count++;
byte[] buff = new byte[16];
DatagramPacket packet = null;
packet = new DatagramPacket(buff, 0, buff.length);
try {
socket.receive(packet);
byte[] bytes = packet.getData();
String value = byteArrToHex2(bytes);
value = value.substring(0,value.length()/2);
textArea_1.setText(" --- 实时接收内容 打印 :");
textArea_1.append("\n\n接收次数:"+count+"\t"+value);
InetSocketAddress address = (InetSocketAddress)packet.getSocketAddress();
if(count < 10){
counts = "0"+count;
System.out.println(" -- 来源IP["+address.toString()+"],接收值["+counts+"] : "+value+" --- ");
}else{
System.out.println(" -- 来源IP["+address.toString()+"],接收值["+count+"] : "+value+" --- ");
}
} catch (IOException e) {
e.printStackTrace();
}
}
} public String byteArrToHex(byte[] btArr){
char strArr[] = new char[btArr.length * 2];
int i = 0;
for(byte bt : btArr){
strArr[i++] = HexCharArr[bt>>>4 & 0xf];
strArr[i++] = HexCharArr[bt & 0xf];
}
return new String(strArr);
} public String byteArrToHex2(byte[] btArr){
StringBuffer sb = new StringBuffer(btArr.length);
for(int i = 0; i < btArr.length; i++){
sb.append(Integer.toString((btArr[i] & 0xFF) + 0x100, 16).substring(1).toUpperCase());
}
return sb.toString();
}
}

java:UDP广播发送与接收数据报实现的更多相关文章

  1. java udp 广播

    原文链接: http://blog.csdn.net/yudajun/article/details/8477149 udp 是一种网络通信协议,不需要客户端和服务器端建立连接即可进行通讯功能.相对于 ...

  2. [java,2018-01-16] HttpClient发送、接收 json 请求

    最近需要用到许多在后台发送http请求的功能,可能需要发送json和xml类型的数据. 就抽取出来写了一个帮助类: 首先判断发送的数据类型是json还是xml: import org.dom4j.Do ...

  3. Android杂谈--HTC等手机接收不到UDP广播报文的解决方案

    最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其他的samsung, huawei, xiaomi, nexus等等均没有 ...

  4. udp协议的数据接收与发送的代码

    我想基于lwIP协议中的UDP协议,用单片机做一个服务器,接受电脑的指令然后返回数据.以下是我的代码 /************************************************ ...

  5. 通过UDP广播实现Android局域网Peer Discovering

    本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...

  6. 给Hi3518e的Uboot添加UDP广播收发功能

    基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先 ...

  7. Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

    1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接 ...

  8. 项目总结22:Java UDP Socket数据的发送和接收

    项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...

  9. Udp广播的发送和接收(iOS + AsyncUdpSocket)下篇

    接上篇C#的Udp广播的发送和接收 http://www.cnblogs.com/JimmyBright/p/4637090.html ios中使用AsyncUdpSocket处理Udp的消息非常方便 ...

随机推荐

  1. (转)Linux下用户组、文件权限详解

    转自https://www.cnblogs.com/123-/p/4189072.html 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它 ...

  2. Linux中级之netfilter防火墙(iptables)

    一.什么是防火墙? 防火墙其实就是一个隔离工具:工作于主机或者网络的边缘 对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测 对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬 ...

  3. 微信引流的方式 PC控制手机的方式

    http://www.yunjing100.cn/ 云鲸一百 小萝卜 http://www.xiaoluobei.com/

  4. STM32SD卡 (U盘)IAP升级

    http://www.openedv.com/posts/list/65104.htm

  5. Java中生成唯一标识符的方法

    有时候业务需要生成唯一标识符,但又不能依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,此时我们就需要用程序来生成一个唯一的全局ID. UUID UUID是指在一台机器上 ...

  6. 【C++】禁用/启用笔记本键盘工具(含源码)

    目录 前言 简单介绍注册表 (1)根键 (2)子键 (3)键值项 操作注册表的几个API函数 (1)打开一个键 (2)查询某一个键值 (3)设置一个键值 (4)新建指定键 (5)删除注册表指定键下的值 ...

  7. GO语言复合类型03---切片

    切片相当于长度可以动态扩张的数组 array[start:end]从数组身上截取下标为[start,end)片段,形成切片start代表开始下标,不写默认代表从头开始切end代表结束下标(本身不被包含 ...

  8. 3D Cube计算引擎加速运算

    3D Cube计算引擎加速运算 华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore. 为什么要做达芬奇架构? AI将作为一项通用技术极大地提高生产力,改 ...

  9. 使用TensorRT集成推理inference

    使用TensorRT集成推理inference 使用TensorRT集成进行推理测试. 使用ResNet50模型对每个GPU进行推理,并对其它模型进行性能比较,最后与其它服务器进行比较测试. ResN ...

  10. 深入理解java虚拟机笔记Chapter3-内存分配策略

    内存分配策略 新生代和老年代的 GC 操作 新生代 GC 操作:Minor GC 发生的非常频繁,速度较块. 老年代 GC 操作:Full GC / Major GC 经常伴随着至少一次的 Minor ...