UDP传输文件和FTP传输文件
创始人
2024-12-28 15:41:35
0次

目录

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) {         //创建Socket         try(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 方法上传文件。最后,在完成操作后关闭连接。

相关内容

热门资讯

最新技巧!!wepoker有没... 很多人使用云端 AI 时,都担心wepoker有没有辅助、内部资料上传带来隐私风险。这款本地运行的 ...
一秒答解!wepoker怎么增... 您好,一秒答解!wepoker怎么增加运气,WPK有挂吗确实有挂下载(最初有辅助挂)这款游戏可以开挂...
一秒答解!wpk辅助器,德扑之... wpk辅助器AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏攻略数据包,断网...
分辨真假!德普之星透视辅助,w... 分辨真假!德普之星透视辅助,wepoker开挂透视教程脚本(总是是真的有辅助挂)AI 是一款可以让一...
每日必看推荐!wepoker怎... 您好:wepoker怎么提高运气这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
推荐一款!!wepoker黑侠... 一款 AI 游戏攻略黑科技工具上线,查攻略效率直接开挂。它整合版本更新、装备搭配、BOSS 打法、牌...
一秒答解!wpk俱乐部辅助器,... 一秒答解!wpk俱乐部辅助器,德扑之星开挂脚本助手(固有有辅助器)AI 是一款可以让一直输的玩家修复...
玩家攻略!wepoker好友房... 您好,玩家攻略!wepoker好友房开挂,WPK哪里有挂神器(一贯有开挂)这款游戏可以开挂的,确实是...
重大通报!!智星德州可以透视吗... 很多人使用云端 AI 时,都担心智星德州可以透视吗、内部资料上传带来隐私风险。这款本地运行的 AI ...
玩家爆料!智星菠萝有挂吗,WP... 智星菠萝有挂吗AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏攻略数据包,断...