网路传输主要的两大协议为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. C# winform 遍历所有页面的所有控件 ,然后判断组件类型是什么

    //循环整个form上的控件 foreach (Control c in this.Controls) { //看看是不是checkbox if (c is CheckBox) { //将找到的con ...

  2. java 使用 ArrayList 排序【包括数字和字符串】

    1.数字排序 /** * 数字排序 */ @Test public void t2() { List<Integer> list = new ArrayList<>(); li ...

  3. Elasticsearch打造全文搜索引擎(二)

    一.Es的文档.索引的CURD操作 1. elasticsearch概念 集群:一个或多个节点组织在一起 节点:一个节点是集群中的一个服务器,有一个名字来标识,默认是一个随机的漫画角色的名字 分片:将 ...

  4. 一文搞懂Flink Window机制

    Windows是处理无线数据流的核心,它将流分割成有限大小的桶(buckets),并在其上执行各种计算. 窗口化的Flink程序的结构通常如下,有分组流(keyed streams)和无分组流(non ...

  5. jmu-ds-舞伴问题

    假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队.跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲.现要求写一算法模拟上述舞伴配对问题. ...

  6. 【Java】main方法的理解

    main方法的理解 main()方法作为程序的入口 main()方法也是一个普通的静态方法 main()方法可以作为我们与控制台交互的方式.(之前:使用Scanner) main方法中的参数args就 ...

  7. Web开发之request

    request常用方法 //常用方法 //得到的是:协议+服务器地址+端口号+工程名称+资源地址+参数 String url = request.getRequestURL(); //得到的是:工程名 ...

  8. Go语言测试:testing

    学习参考来源:https://www.liwenzhou.com/posts/Go/16_test/ go test工具 必须导入包: import "testing" go te ...

  9. 开发 IDEA Plugin 引入探针,基于字节码插桩获取执行SQL

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 片面了! 一月三舟,托尔斯泰说:"多么伟大的作家,也不过就是在书写自己的片 ...

  10. HTTP API认证授权方案

    目录 一.需求背景 二.常用的API认证技术 2.1 App Secret Key + HMAC 2.2 OAuth 2.0 2.2.1 Authorization Code Flow 2.2.2 C ...