编写广播数据类

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. 8.10-11 mount、umount

    8.10 mount:挂载文件系统 mount命令可以将指定的文件系统挂载到指定目录(挂载点),在Linux系统下必须先挂载所有的设备,然后才能被访问,挂载其实就是为要访问的设置开个门(开门才能访问) ...

  2. 从实例分析ELF格式的.gnu.hash区与glibc的符号查找

    前言 ELF格式的.gnu.hash节在设计上比较复杂,直接从glibc源码进行分析的难度也比较大.今天静下心来看了这篇精彩的文章,终于将布隆滤波器.算数运算转为位运算等一系列细节搞懂了(值得一提的是 ...

  3. 在 Android 使用 QuickJS JavaScript 引擎教程

    quickjs-android 是 QuickJS JavaScript 引擎的 Android 接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单.armeabi-v7a 的大小仅 350 ...

  4. 关于一类docker容器闪退问题定位

    背景:正在学习docker期间,接到一个任务,通过docker部署一个应用A.该应用A类似于之前部署的应用B,结果很自然地犯了形而上学的错误. 思路:基于dockerfile+docker-compo ...

  5. [leetcode] 38. 报数(Java)(字符串处理)

    38. 报数 水题 class Solution { public String next(String num) { String ans = ""; int i = 0; wh ...

  6. python实现发送微信消息

    import json from threading import Timer from wxpy import * import requests import urllib.parse def g ...

  7. Python+Selenium - windows安全中心的弹窗(账号登录)

    当出现如下图所示的 Windows安全中心弹窗,需要输入用户名和密码时 如何用Python+selenium跳过这个登录. 步骤: 1.在注册表中三个位置各添加两个东西:iexplore.exe 和 ...

  8. Unity3d无法导入TensorFlowSharp plugin包问题

    环境: unity3d:2018.3.0.f2 版本 解决方法: TensorFlowSharp 仍然属于测试版本. 因此,需要将Unity3d 转到测试版本. (1)点击 File > Bui ...

  9. VUE3后台管理系统【路由鉴权】

    前言: 在"VUE3后台管理系统[模板构建]"文章中,详细的介绍了我使用vue3.0和vite2.0构建的后台管理系统,虽然只是简单的一个后台管理系统,其中涉及的技术基本都覆盖了, ...

  10. 3D-camera结构光原理

    3D-camera结构光原理 目前主流的深度探测技术是结构光,TOF,和双目.具体的百度就有很详细的信息. 而结构光也有双目结构光和散斑结构光等,没错,Iphone X 的3D深度相机就用 散斑结构光 ...