基于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 协议 不同计算机内的进程之间进行数据 ...
随机推荐
- VMware_win10能ping通虚拟机ip,虚拟机ping不通win10ip的解决方法
一.虚拟机设置为桥接模式 二.修改虚拟机linux的ip 查看win10的ip和网关 使用ifconfig查看网卡名,并在 /etc/sysconfig/network-scripts/目录修改对应的 ...
- LC 二叉树的最大深度
https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnd69e/ Recursion /** * Definitio ...
- python+selenium 元素定位--iframe
1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ...
- Vue3项目的简单搭建与项目结构的简单介绍
Vue3项目的创建与运行 本文记录下自己近期学习的Vue3项目的创建,以及如何去运行一个Vue应用,同时包括对Vue项目结构进行一个简单的介绍. 一.node与npm的安装 通常平常进行开发的同学应该 ...
- Keil MDK STM32系列(八) STM32F4基于HAL的PWM和定时器输出音频
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- ELF文件格式学习总结
ELF文件格式学习总结 ELF文件格式学习总结1. 概述2. 目标文件结构3. ELF文件头3.1 魔数3.2 文件类型3.3 机器类型4. ELF文件内容4.1段表4.2字符串表(.**strtab ...
- YC-Framework版本更新:V1.0.5
分布式微服务框架:YC-Framework版本更新V1.0.5!!! 本次版本V1.0.5更新 所有模块依赖调整: 部分问题修复: Nacos模块化: Eureka模块化: 支持SOA(即WebSer ...
- 【原创】美团二面:聊聊你对 Kafka Consumer 的架构设计
在上一篇中我们详细聊了关于 Kafka Producer 内部的底层原理设计思想和细节, 本篇我们主要来聊聊 Kafka Consumer 即消费者的内部底层原理设计思想. 1.Consumer之总体 ...
- 【记录一个问题】android下opencl中的event.getProfilingInfo()测速时间并不准确
使用了类似的代码来做android下opencl的时间测试: cl::CommandQueue queue(context, devices[0], CL_QUEUE_PROFILING_ENABLE ...
- 解决new Thread().Start导致高并发CPU 100%的问题
背景 之前接手一个项目的时候,发现到处是 new Thread(()=>{ //do something }).Start(); 这么做的目的,无非是为了减少页面等待时间提高用户体验,把一些浪费 ...