gpt4 book ai didi

Java UDP文件传输应用

转载 作者:行者123 更新时间:2023-12-02 06:57:28 25 4
gpt4 key购买 nike

我正在尝试用 Java 创建一个简单的 UDP 文件传输应用程序(服务器和客户端),但我对此几乎没有任何经验,仍在学习一些基础知识。我已经成功制作了一个功能应用程序,例如,它可以将选定的文件从我的笔记本电脑发送到我的台式机,但使用 TCP。

本质上,我想做的是一个应用程序,您可以在其中选择一个选项来列出服务器上的文件(特定的默认文件夹,在本例中为 C:\Sharefolder),一个将文件上传到服务器的选项,以及从服务器下载文件的另一个选项。我怎样才能在客户端的方法中做到这一点?

这是我迄今为止为客户提供的代码,我不知道我在这里的方向是否正确。我还在底部区域保留了一些旧的 TCP 程序代码,所以没关系。

public class Client {

private final static int PACKETSIZE = 100 ;

public static void upload(String ipadd, String iport, String fname) {

DatagramSocket socket = null ;

try {
InetAddress host = InetAddress.getByName(ipadd);
int port = Integer.parseInt(iport);

socket = new DatagramSocket(port, host) ;

File file = new File("C:\\Sharefolder\\" +fname);
long size = file.length();
if (size > Integer.MAX_VALUE) {
System.out.println("File too big");
}
byte[] bytes = new byte[(int) size];
for(int i=0; i<size; i++) {
//Send file bytes to a byte array?
}

DatagramPacket packet = new DatagramPacket(bytes, bytes.length, host, port ) ;


byte[] bytes = new byte[(int) size];
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

int count;

while ((count = bis.read(bytes)) > 0) {
out.write(bytes, 0, count);
}

out.flush();
out.close();
fis.close();
bis.close();
socket.close();

如果有人可以向我指出任何可以帮助我检查我应该在代码上做什么的方向,我将不胜感激。谢谢!

最佳答案

我不明白按照客户端中的方法执行此操作的请求。在高层,您将拥有您的操作定义的方法(listFiles(path)uploadFile(localPath, remotePath)downloadFile(localPath,远程路径))。

问题在于 UDP 不可靠,因此您必须控制数据是否真正到达。

您需要的一些提示:

1)一个描述您的内容格式的迷你协议(protocol)(每个命令命令的消息,如何传递参数/数据)等。

2)消息发送后,您需要设置超时并(如果没有收到回复)再次发送消息。

3) 当您接收/发送文件时,它将分为几个 block (数据报最大负载为 64K,除非您使用 IPv6)。控制订单,检查是否全部到达,未到达的请求退回。

4)玩得开心!

它比 TCP 复杂得多,因为你必须控制 TCP 为你控制的很多事情,但这是可以做到的。既然你没有提到它们,我会向给你分配任务的人检查限制(你可以使用 IPv6?通过所需的最大文件大小是多少?)

关于Java UDP文件传输应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com