网路传输主要的两大协议为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. 2.OSI各层概述

    应用层 1.用户与网络的界面,所有能和用户交互产生网络流量的程序 典型应用层服务:FTP.SMTP.HTTP 表示层 1.用于处理在两个通信系统中交换信息的标识方式 功能1:数据格式变换(翻译) 功能 ...

  2. python 迭代器链式处理数据

    pytorch.utils.data可兼容迭代数据训练处理,在dataloader中使用提高训练效率:借助迭代器避免内存溢出不足的现象.借助链式处理使得数据读取利用更高效(可类比操作系统的资源调控) ...

  3. Mysql高性能优化

    一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...

  4. javascript实现数字整数位每三位一个逗号分隔

    Number(1234567).toLocaleString(); //结果"1,234,567" Number(123456789).toLocaleString()//结果&q ...

  5. .NET对接极光消息推送

    什么是APP消息推送? 很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的"消息 ...

  6. Backbone.js 0.9.2 源码分析收藏

    Backbone 为复杂Javascript应用程序提供模型(models).集合(collections).视图(views)的结构.其中模型用于绑定键值数据和自定义事件:集合附有可枚举函数的丰富A ...

  7. PAT 乙级 1002. 写出这个数 (20)(C语言描述)

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...

  8. Zookeeper介绍一

    Zookeeper是什么 ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终,将简单易用的接口和性能高效.功能稳定 ...

  9. unity3d inputfield标签控制台打印object

    inputfield标签控制台打印object 这说明没有字符串给入 这是因为 inputfield下的text不能人为写入值,只能在game界面输入. 所以这个标签里的text做个默认值不好搞.

  10. 使用EdgyGeo Cesium工具查询下载数据集

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ EdgyGeo, Inc. 带来了一件非常棒的工作支撑架构.工程 ...