网路传输主要的两大协议为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版的更多相关文章

  1. 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版

    技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...

  2. TCP与UDP传输协议

    目录结构: contents structure [-] 1 TCP协议和UDP协议的比较 1.1 TCP协议 TCP的全称是Transmission Control Protocol (传输控制协议 ...

  3. 在两个Android设备间通过UDP传输目录内文件

    这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...

  4. 一、网络编程-UDP传输协议及socket套接字使用

    知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP          2.ip:ip就是标记网络中中的一台电脑 ...

  5. 基于UDP的客户端和服务器端的代码设计

    实验平台 linux 实验内容 编写UDP服务器和客户端程序,客户端发送消息,服务器接收消息,并打印客户端的IP地址和端口号. 实验原理 UDP是无需连接的通信,其主要实现过程如下: 同样,我们可以按 ...

  6. 标准C实现基于TCP/IP协议的文件传输

    上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...

  7. 标准C语言实现基于TCP/IP协议的文件传输

    TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下:  1.Socket系统调用  为了进行网络I/O,服务器和客户机两 ...

  8. STM32 Bootloader基于ymodem传输协议串口IAP升级详解

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...

  9. Python 基于 TCP 传输协议的网络通信实现

    1.基础概念 什么是网络编程? 指在网络环境中,如何实现不在同一物理位置中的计算机之间进行数据通信 如果要保证数据通信顺利完成,则需要先了解如下几个概念: 1.1 协议 不同计算机内的进程之间进行数据 ...

随机推荐

  1. JMeter_分布式压测配置

    前置条件 电脑A,电脑B,电脑C均安装相同版本的JMeter 和JDK.其中电脑A作为控制机,电脑B和电脑C作为施压机 电脑A IP:172.16.0.114 电脑B IP:172.16.0.115 ...

  2. c# - 按引用内存地址传参 和 按输出传参 的具体使用

    1.前言 传递参数,不需要返回值,对懒人很舒服哟,缺点是不好定位数据 2.操作 using System; namespace ConsoleApp1.letVlaueGo { public clas ...

  3. 读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法

    1.前言 因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是 发现java 读取会导致中文乱码成 问号????的乱码  ,百度找了好多博客,基本都是一摸一 ...

  4. Windows 10 如何在当前位置打开 CMD 命令窗口?

    方法一 Win + R 键召唤出运行窗口,然后输入 "CMD" 打开命令提示符. 使用 cd 命令更改当前命令提示符的工作环境. 注释 cd/ - 退到当前所在盘符 cd.. - ...

  5. 虚拟机上CentOS7环境配置

    原文链接:https://www.toutiao.com/i6493449649939022350/ 之前网络和基本环境以及完成,现在我们再配置一些内容,方便我们之后的学习. 设置网络YUM源 下载我 ...

  6. vscode 前端好用插件汇总

    本篇文章根据实际开发中使用的扩展插件,结合<精选!15 个必备的 VSCode 插件(前端类)>.<vscode 插件推荐 - 献给所有前端工程师(2017.8.18更新)>中 ...

  7. Java CAS 原理详解

    1. 背景 在JDK 5之前Java语言是靠 synchronized 关键字保证同步的,这会导致有锁.锁机制存在以下问题: 在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问 ...

  8. Solon Web 开发,四、请求上下文

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  9. 看看CSDN的吃相

    大伙快来看看CSDN的吃相.

  10. 面试突击17:HashMap除了死循环还有什么问题?

    面试合集:https://gitee.com/mydb/interview 本篇的这个问题是一个开放性问题,HashMap 除了死循环之外,还有其他什么问题?总体来说 HashMap 的所有" ...