UDP传输文件和FTP传输文件

目录

UDP(用户数据报协议):

实例代码:

DatagramSocket:

DatagramPacket:

FTP(File Transfer Protocol,文件传输协议)

实例代码:


UDP(用户数据报协议):

使用 UDP(用户数据报协议)传输文件不是一种常见和推荐的方式,因为 UDP 是无连接、不可靠的协议,不保证数据包的顺序和完整性。

但如果非要使用 UDP 来传输文件,可以考虑以下步骤:

  1. 分割文件:将文件分割成固定大小的数据块。

  2. 为每个数据块添加包头:包头中包含数据块的序号、总数据块数等信息,以便接收方重组文件。

  3. 发送数据块:使用 UDP 套接字逐个发送数据块。

  4. 接收数据块:接收方接收到数据块后,根据包头中的序号将其存储在合适的位置。

  5. 重组文件:当接收完所有数据块后,按照序号重组文件。

实例代码:

服务端:


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpServer {public static void main(String[] args) {//创建Socket,监听6666端口try(DatagramSocket serverSocket=new DatagramSocket(6666)){//读取来自客户端的”数据包“//创建数据包byte[] buff=new byte[1024];DatagramPacket serverPacket=new DatagramPacket(buff,buff.length);//接收数据包serverSocket.receive(serverPacket);System.out.println("读取完毕!");//从数据包中,读取数据byte[] data= serverPacket.getData();String str=new String(data).trim();System.out.println("接收的数据为:"+str);if("天王盖地虎!".equals(str)){serverPacket.setData("宝塔镇河妖!".getBytes());}else{serverPacket.setData("给劳资出去!".getBytes());}//反馈信息给客户端(发送数据包至客户端)serverSocket.send(serverPacket);} catch (SocketException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

客户端:


import java.io.IOException;
import java.net.*;public class UdpClient {public static void main(String[] args) {//创建Sockettry(DatagramSocket clientSocket=new DatagramSocket()){//连接指定主机的端口clientSocket.connect(InetAddress.getByName("192.168.199.143"),6666);//创建数据包DatagramPacket clientPacket=new DatagramPacket(new byte[1024],1024);//将数据放入数据包clientPacket.setData("天王盖地虎!".getBytes());//发送数据包clientSocket.send(clientPacket);//等待接收反馈信息(等待接收来自服务端的数据包)clientSocket.receive(clientPacket);byte[] data=clientPacket.getData();String ans=new String(data);System.out.println("来自服务端的信息:"+ans);} catch (SocketException e) {throw new RuntimeException(e);} catch (UnknownHostException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

DatagramSocket:

DatagramSocket 是 Java 中用于实现 UDP(用户数据报协议)通信的类。

它代表了 UDP 通信中的端点,可以用于发送和接收数据报(DatagramPacket)。

通过创建 DatagramSocket 对象,可以指定端口来监听传入的数据报,或者不指定端口让系统自动分配可用端口。使用 DatagramSocket 可以发送数据报到指定的目标地址和端口,也可以从网络中接收数据报。

DatagramPacket:

DatagramPacket 在 Java 中用于表示 UDP(用户数据报协议)的数据报。

它包含了要发送或已经接收的数据,以及与数据相关的一些元信息,例如数据的目标地址(包括 IP 地址和端口号)或者数据的来源地址(在接收数据报时)。

具体来说:

  • 对于发送数据,通过创建一个包含数据、目标 IP 地址和端口的 DatagramPacket 对象,然后使用 DatagramSocket 来发送这个数据报。

  • 对于接收数据,当使用 DatagramSocket 接收数据时,接收到的数据会被封装在一个 DatagramPacket 对象中,通过这个对象可以获取数据以及发送方的地址和端口等信息。

FTP(File Transfer Protocol,文件传输协议)

FTP是用于在网络上进行文件传输的标准协议。

 FTP 传输文件的一般步骤:

  1. 建立连接:客户端与 FTP 服务器建立连接。这通常需要提供服务器的地址、用户名和密码。

  2. 选择传输模式:FTP 支持两种传输模式,主动模式和被动模式。

    • )主动模式:客户端向服务器发送 PORT 命令,告知服务器连接客户端的特定端口以建立数据连接。
    • )被动模式:客户端向服务器发送 PASV 命令,服务器响应并告知客户端一个用于建立数据连接的端口。
  3. 导航目录:客户端可以使用命令(如 CD )在服务器的文件系统中导航到目标目录。

  4. 上传文件(从客户端到服务器):

    • )使用 STOR 命令指定要上传的本地文件和服务器上的目标文件名。
  5. 下载文件(从服务器到客户端):

    • )使用 RETR 命令指定要下载的服务器文件和本地的目标文件名。
  6. 关闭连接

在 Java 中,可以使用第三方库(如 Apache Commons Net)来实现 FTP 文件传输。

实例代码:

import org.apache.commons.net.ftp.FTPClient;import java.io.FileInputStream;
import java.io.IOException;public class FtpUploadExample {public static void main(String[] args) {String server = "ftp.example.com";int port = 21;String username = "username";String password = "password";//创建FTP客户端(FTPClient对象),用于FTP服务器的连接访问FTPClient ftpClient = new FTPClient();try {ftpClient.connect(server, port);//连接ftpClient.login(username, password);//登录ftpClient.enterLocalPassiveMode();String remoteFilePath = "/remote/directory/file.txt";String localFilePath = "/local/directory/file.txt";FileInputStream inputStream = new FileInputStream(localFilePath);//保存文件(上传本地文件至FTP服务器当前用户目录下)boolean success = ftpClient.storeFile(remoteFilePath, inputStream);if (success) {System.out.println("File uploaded successfully.");} else {System.out.println("Failed to upload file.");}inputStream.close();} catch (IOException e) {e.printStackTrace();} finally {try {if (ftpClient.isConnected()) {ftpClient.disconnect();}} catch (IOException e) {e.printStackTrace();}}}
}

上述代码中,首先创建 FTPClient 对象,然后连接到 FTP 服务器、登录、设置传输模式,并使用 storeFile 方法上传文件。最后,在完成操作后关闭连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

—张pdf怎么分割成多页,怎么把一个pdf分割

在数字化时代,pdf文件已经成为我们工作和生活中不可或缺的一部分。然而,有时候我们可能会遇到需要将一张pdf文件分割成多页的情况。无论是为了便于分享,还是为了满足特定的文档格式要求,这个任务都可能变得相当棘手。但别担心&…

zookeeper+kafka消息队列群集部署

一、消息队列 1.消息队列 消息是应用间传送的数据 消息队列是应用见的通信方式,消息发送后立即返回,由消息系统确保消息可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发…

设计模式学习(二)工厂模式——抽象工厂模式+注册表

设计模式学习(二)工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…

快速安装miniconda3和熟悉conda基本的操作

快速安装miniconda3和熟悉conda基本的操作 一、安装miniconda3 参考miniconda3官方网站 https://docs.anaconda.com/miniconda/安装环境 mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh…

CSS-0_3 CSS和单位

文章目录 CSS的值和单位属性值长度单位CSS和绝对单位CSS和相对单位百分比em & rem视口 颜色单位 碎碎念 CSS的值和单位 我们知道,CSS是由属性和属性值所组成的表 随着CSS的发展,属性不说几千也有几百,我从来不支持去背诵所有的可能性。…

昇思25天学习打卡营第22天|基于MindSpore的红酒分类实验

基于MindSpore的红酒分类实验 K近邻算法实现红酒聚类 1、实验目的 了解KNN的基本概念;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍 K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,…

WPF 手撸插件 一

1、本文主要使不适用第三方工具,纯手工的WPF主项目加载另一个WPF的项目,这里我们加载的是*.exe。 2、项目结构如下图。AbstractionLayer用于创建插件的接口。WPFIPluginDemo是主程序。WpfPlugin3是要加载的插件程序。 3、 AbstractionLayer中添加接口IP…

机器学习——机器学习概述

机器学习——机器学习概述 1 什么是机器学习2 为什么使用机器学习3 常用术语和示例4 机器学习系统的类型4.1 有监督学习4.2 无监督学习4.3 半监督学习4.4 强化学习4.5 批量学习4.6 在线学习(核外学习)4.7 基于实例的学习4.8 基于模型的学习 5. 机器学习的…

flutter ios打包 xcode报错module ‘xxx‘ not found

flutter ios打包 xcode报错module ‘xxx’ not found 如果已经在androidstudio中成功运行了flutter build ios --release。 那么可能是你使用xcode打开的是ios/Runner.xcodeproj文件。 你关掉xcode,重新打开ios/Runner.xcworkspace/文件。然后重新archive&#xff…

【C++】P10287 [GESP样题 七级] 最长不下降子序列 题解_动态规划dp_图论_拓扑排序_洛谷_算法竞赛

P10287 [GESP样题 七级] 最长不下降子序列 题解 Link:Luogu - P10287 文章目录 P10287 [GESP样题 七级] 最长不下降子序列 题解题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 提示数据规模…

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具,用于列出正在运行的Java进程 jps命令的使用:cmd打开直接jps 1.1不带参数: jps 默认情况下,列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l:显示完整的主类名或 JAR 文件…

计算机的错误计算(三十二)

摘要 在计算机的错误计算(二十八)与(三十 一)中,我们探讨了 Visual Studio 对 6个随机exp(x)函数的计算精度问题。根据网友的反馈,本节将展示 Python 对它们的输出:结果几乎与 Visual Studio …

MyBatis框架学习笔记(四):动态SQL语句、映射关系和缓存

1 动态 SQL 语句-更复杂的查询业务需求 1.1 动态 SQL-官方文档 (1)文档地址: mybatis – MyBatis 3 | 动态 SQL (2)为什么需要动态 SQL 动态 SQL 是 MyBatis 的强大特性之一 使用 JDBC 或其它类似的框架,根据不同条…

链接追踪系列-09.spring cloud项目整合elk显示业务日志

准备工作: 参看本系列之前篇:服务器安装elastic search 本机docker启动的kibana-tencent 使用本机安装的logstash。。。 本微服务实现的logstash配置如下: 使用腾讯云redis 启动本机mysql 启动本机docker 启动nacos,微服务依赖它作为…

为什么要使用加密软件?

一、保护数据安全:加密软件通过复杂的加密算法对敏感数据进行加密处理,使得未经授权的人员即使获取了加密数据,也无法轻易解密和获取其中的内容。这极大地提高了数据在存储、传输和使用过程中的安全性。 二、遵守法律法规:在许多国…

实验六:频域图像增强方法

一、实验目的 熟练掌握频域滤波增强的各类滤波器的原理及实现。分析不同用途的滤波器对频域滤波增强效果的影响,并分析不同的滤波器截止频率对频域滤波增强效果的影响。二、实验原理 ① Butterworth 低通滤波器:一种具有最大平坦通带幅度响应的滤波器。它的特点是在通带内具…

Dify中固定递归字符文本分割器的chunk长度计算方式

本文主要从源码角度剖析了Dify中FixedRecursiveCharacterTextSplitter的chunk长度计算方式。 1.self._length_function(chunk) 源码位置:dify\api\core\splitter\fixed\_text\_splitter.py\FixedRecursiveCharacterTextSplitter类\split\_text方法\self.\_length\_function(…

AutoHotKey自动热键(十一)下载SciTE4AutoHotkey-Plus的中文增强版脚本编辑器

关于AutoHotkey的专用编辑器, SciTE4AutoHotkey是一个免费的基于 SciTE 的 AutoHotkey 脚本编辑器,除了 DBGp 支持, 它还为 AutoHotkey 提供了语法高亮, 调用提示, 参数信息和自动完成, 以及其他拥有的编辑特性和辅助工具.XDebugClient 是一个基于 .NET Framework 2.0 的简单开…

buuctf-web

先输入127.0.0.1查找本地 得到网页目录,再输入127.0.0.1|ls查找下一级 得到php文件,127.0.0.1 | ls /返回上级目录 127.0.0.1 | cat /flag得到flag

如何提取视频中的音频?提取音频的几种方法

如何提取视频中的音频?提取视频中的音频,是许多人在处理多媒体内容时常遇到的需求。这一过程不仅仅是简单地从视听媒体中抽离音频部分,它背后蕴含着许多技术上的挑战和创意上的可能性。通过提取音频,你可以更方便地利用视频中的声…