基于UDP传输协议局域网文件接收软件设计 Java版
网路传输主要的两大协议为TCP/IP协议和UDP协议,本文主要介绍基于UDP传输的一个小软件分享,针对于Java网络初学者是一个很好的练笔,大家可以参考进行相关的联系,但愿能够帮助到大家。
话不多说,直接上代码结构图:

FindThread类是为了创建接收服务线程,GetLocalHostAddress类是为了获取本地IP地址,作为远程传输的目标地址,GetLocalTime是为了获取本地时间,为主界面提示信息建立时间戳,GetRandomNumber是为了方便创建端口号的,端口号正常范围是0到65535,(具体信息请百度,谢谢,有的人老是问为什么,我不禁要说一句How old are you!为什么不能自己去查一查呢!)GetSavePath类是为了实现存储功能,路径由用户自定义,MyRunable是上文所提线程的实例化,UDPReceiveSever类是详细实现协议功能,也是这个软件的核心部分。下面具体详细的列一下实现代码:
FindThread类
1 package fc;
2
3 public class FindThread {
4 public static Thread findThread(long threadId) {
5 ThreadGroup group = Thread.currentThread().getThreadGroup();
6 while(group != null) {
7 Thread[] threads = new Thread[(int)(group.activeCount() * 1.2)];
8 int count = group.enumerate(threads, true);
9 for(int i = 0; i < count; i++) {
10 if(threadId == threads[i].getId()) {
11 return threads[i];
12 }
13 }
14 group = group.getParent();
15 }
16 return null;
17 }
18 }
GetLocalHostAddress类
1 package fc;
2
3 import java.net.InetAddress;
4 import java.net.UnknownHostException;
5
6 public class GetLocalHostAddress {
7
8 public String getLocalHostAddress() throws UnknownHostException{
9 InetAddress ia = InetAddress.getLocalHost();
10 String ip= ia.getHostAddress();
11 return ip;
12 }
13
14 }
GetLocalTime类
1 package fc;
2
3 import java.text.SimpleDateFormat;
4 import java.util.Date;
5
6 public class GetLocalTime {
7
8 public String getLocalTime(){
9 Date date = new Date();
10 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
11 String time = dateFormat.format(date);
12 return time;
13 }
14 }
GetRandomNumber类
1 package fc;
2
3 import java.util.Random;
4
5 public class GetRandomNumber {
6
7 public int getRandomNumber(){
8 int max=65535;
9 int min=1025;
10 Random random_N = new Random();
11 int num = random_N.nextInt(max)%(max-min+1) + min;
12 return num;
13 }
14 }
GetSavePath类
1 package fc;
2
3 import java.io.File;
4
5 import javax.swing.JFileChooser;
6 import javax.swing.JLabel;
7
8 public class GetSavePath {
9
10 private String filepath = "";
11 public String getSavePath(){
12 JFileChooser jfc=new JFileChooser();
13 jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
14 jfc.showDialog(new JLabel(), "选择路径");
15 File file=jfc.getSelectedFile();
16 if(file.isDirectory()){
17 }else if(file.isFile()){
18 }
19 this.filepath=file.getAbsolutePath();
20 return filepath;
21 }
22 }
MyRunable类
1 package fc;
2
3 import java.io.IOException;
4
5 public class MyRunnable implements Runnable {
6 public void run() {
7 UDPReceiveService urs = new UDPReceiveService();
8 try {
9 urs.receiveFile();
10 } catch (IOException | InterruptedException e) {
11 e.printStackTrace();
12 }
13 }
14 }
UDPReceiveService类
1 package fc;
2
3 import java.io.BufferedOutputStream;
4 import java.io.DataOutputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.net.DatagramPacket;
8 import java.net.DatagramSocket;
9
10 import fm.MainWindows;
11
12 public class UDPReceiveService {
13
14 public static String IP = "";
15 public static String filePath = "";
16 public static int Port = 0;
17 GetLocalTime glt = new GetLocalTime();
18 public static long thr_id;
19
20 @SuppressWarnings("static-access")
21 void receiveFile() throws IOException, InterruptedException {
22 MainWindows.jta.setText("");
23 if(filePath.equals("")){
24 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"服务启动失败......错误:文件存储路径无效或为空!\n");
25 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
26 Thread.currentThread().interrupt();
27 }
28 thr_id = Thread.currentThread().getId();
29 @SuppressWarnings("resource")
30 DatagramSocket dataSocket = new DatagramSocket(Port);
31 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"服务准备启动......\n");
32 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
33 byte[] receiveByte;
34 DatagramPacket dataPacket;
35 @SuppressWarnings("resource")
36 DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filePath)));
37 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"创建接收路径已完成!\n");
38 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
39 int i = 0;
40 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"服务已经启动!\n");
41 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
42 MainWindows.jt3_1.setText("服务正在运行......");
43 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
44 int num1 = 0,num2 = 0;
45 double num3 = 0;
46 while(i == 0){
47 receiveByte = new byte[64512];
48 dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
49 dataSocket.receive(dataPacket);
50 i = dataPacket.getLength();
51 if(i > 0){
52 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"捕获到数据包,大小为"+i/1024+"KB,数据存储已完成!\n");
53 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
54 fileOut.write(receiveByte,0,i);
55 fileOut.flush();
56 num3 = num3 + i/1024;
57 i = 0;
58 num2 = num2 + 1;
59 }
60 if(num2 > 0 && num2 == num1){
61 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"文件存储已完成,大小:"+num3/1024+"M\n");
62 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
63 Thread.currentThread().sleep(10);
64 MainWindows.jta.append("【"+glt.getLocalTime()+"】 "+"服务重载成功,正在运行......\n");
65 MainWindows.jta.setCaretPosition(MainWindows.jta.getText().length());
66 num2 = 0;
67 }
68 num1=num2;
69 }
70 }
71 }
窗体文件就不再详细展出了,运行结果如下图:

基于UDP传输协议局域网文件接收软件设计 Java版的更多相关文章
- 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版
技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...
- TCP与UDP传输协议
目录结构: contents structure [-] 1 TCP协议和UDP协议的比较 1.1 TCP协议 TCP的全称是Transmission Control Protocol (传输控制协议 ...
- 在两个Android设备间通过UDP传输目录内文件
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...
- 一、网络编程-UDP传输协议及socket套接字使用
知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP 2.ip:ip就是标记网络中中的一台电脑 ...
- 基于UDP的客户端和服务器端的代码设计
实验平台 linux 实验内容 编写UDP服务器和客户端程序,客户端发送消息,服务器接收消息,并打印客户端的IP地址和端口号. 实验原理 UDP是无需连接的通信,其主要实现过程如下: 同样,我们可以按 ...
- 标准C实现基于TCP/IP协议的文件传输
上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...
- 标准C语言实现基于TCP/IP协议的文件传输
TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下: 1.Socket系统调用 为了进行网络I/O,服务器和客户机两 ...
- STM32 Bootloader基于ymodem传输协议串口IAP升级详解
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...
- Python 基于 TCP 传输协议的网络通信实现
1.基础概念 什么是网络编程? 指在网络环境中,如何实现不在同一物理位置中的计算机之间进行数据通信 如果要保证数据通信顺利完成,则需要先了解如下几个概念: 1.1 协议 不同计算机内的进程之间进行数据 ...
随机推荐
- 【IntelliJ IDEA】代码模板
psvm:main方法 sout:console输出 iter:foreach遍历 fori:for索引遍历
- spring cloud Zuul + 路由熔断【服务降级】 --- 心得
1.前言 刚入门 时,使用 ribbon + hystrix + restTemplate ,实现了简单的 接口访问 + 客户端负载均衡 + 服务熔断保护 : 然后学习了 feign ,整合了 r ...
- FIS Issue 标记
-----已知 [pack问题]忽视<!--[if lt IE 9]>进行合并 https://github.com/fex-team/fis/issues/253 关于增加md5戳以后文 ...
- 如何对K8s进行考核?Kuberhealthy来打个样!
2019年11月,在圣地亚哥KubeCon,我们发布了kuberhealth 2.0.0--将kuberhealthy作为合成监测的Kubernetes operator.这个新功能为开发人员提供了创 ...
- JAVA之垃圾收集器
概述 垃 圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计 ...
- 【Java】获取两个字符串中最大相同子串
题目 获取两个字符串中最大相同子串 前提 两个字符串中只有一个最大相同子串 解决方案 public class StringDemo { public static void main(String[ ...
- halcon视觉入门扫盲篇
halcon视觉入门扫盲篇 前言 在公司让我研究视觉的时候,我是两眼一抹黑的.之前完全没有接触过视觉.综合权衡后选择了Halcon,使用的是HDevelop 13 (64-bit). ...
- 关于mysql,需要掌握的基础(一):CRUD、存储引擎、单表查询相关、多表查询join、事务并发、权限管理等等
目录 关于mysql,需要掌握的基础(一): 1.了解数据库sql.数据库系统.数据库管理系统的概念. 2.了解DDL.DML.DQL语句是什么? 3.了解存储引擎.存储引擎[InnoDB 和 MyI ...
- VsCode配置C/C++开发环境
Visual Studio Code(VS Code)是基于 Electron 开发,支持 Windows.Linux 和 macOS 操作系统.内置了对JavaScript,TypeScript和N ...
- Web:移动端阻止默认行为的小坑
问题 移动端 web 开发中,使用 addEventListener 阻止了 touchstart 事件的默认行为却发现没有生效 描述 再移动端 web 开发中,我们一般会用 addEventList ...