编写广播数据类

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. k8s总结复习

    一.k8s介绍 Kubernetes(k8s)是Google开源的容器集群管理系统.在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模 ...

  2. rsync 服务配置_rsync命令使用方法

    rsync介绍 rsync用来定时备份服务器中的文件或者目录,有三种工作模式,本地复制,使用系统用户认证,守护进程方式,开源高效.同步工具,把一台机器上的文件同步都另一台机器 .默认使用873端口 选 ...

  3. shell应用之监测电脑内存、负载和磁盘的使用情况

    1 #!/bin/bash 2 for i in $(cat ip.txt);do 3 #内存 4 total_memo=$(ssh $i "free -m" |grep Mem ...

  4. mysql8 安装配置教程

    第一步 下载安装包 MySQL 是甲骨文(Oracle)公司产品,可以到官网上下载 MySQL: 官网下载地址:https://dev.mysql.com/downloads/mysql/ 如果嫌弃官 ...

  5. s40 KVM虚拟化企业级实战

    1-为何使用虚拟化 02-KVM虚拟化环境准备 yum install libvirt* virt-* qemu-kvm* -y [root@cs7-kvm ~]# systemctl start l ...

  6. 能够划分局域网的VLAN

    VLAN与三层交换机 1. VLAN的概述与优势 1.1 分割广播域 1.2 VLAN的优势 2. VLAN的种类 2.1 静态VLAN 2.2 动态VLAN 3. VLAN的ID 4.三层交换机转发 ...

  7. Go语言协程并发---select多路复用应用

    package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...

  8. Jmeter- 笔记7 - 服务器监控(ServerAgent配置)

    文件:ServerAgent - 2.2.3.zip  放网盘了 在服务器的操作:只需要把这个文件上传到被监控服务器,然后解压,启动sh startagent.sh --udp-port 0 --tc ...

  9. 如何写新的Python OP

    如何写新的Python OP Paddle 通过 py_func 接口支持在Python端自定义OP. py_func的设计原理在于Paddle中的Tensor可以与numpy数组可以方便的互相转换, ...

  10. 深度学习与TensorFlow

    深度学习与TensorFlow DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感 ...