gpt4 book ai didi

java - 文件未找到异常 --- 将文件引用传递给 RMI 客户端时出现问题

转载 作者:行者123 更新时间:2023-12-01 18:23:34 24 4
gpt4 key购买 nike

我昨天尝试与我的一个客户端与我的系统(远程服务器和使用 Ubuntu 14.04 的客户端系统)进行通信。

该代码是关于从服务器到客户端的文件传输,通过将文件引用传递给客户端,然后客户端使用该引用下载它。我们通过 LAN 相互连接,并且能够成功 ping 通对方的 IP(我的---10.0.0.2 和他的---10.0.0.1)。

但是,当我们在 CentOS Linux 上使用 rmiregistry & 运行此代码,然后在我的系统上运行服务器端类以及运行 java 客户端类时,我们的连接已完成,但是,我们无法将文件从我的系统传递到他的系统...

抛出的异常是:-

java.io.FileNotFoundException at Java_Client_1 --- File in = u1.Uploads();
// I have printed the comment on the line having error in the class Java_client_1 class' `main()` method.

驻留在客户端和服务器上的通用接口(interface):-

import java.io.*;
import java.rmi.*;

public interface Upload_1 extends Remote {
File Uploads() throws RemoteException;
}

客户端类代码:-

import java.io.*;
import java.rmi.*;
import java.rmi.registry.*;

public class Java_Client_1 {
public static void main(String[] args) {
try{
Registry registry=LocateRegistry.getRegistry("10.0.0.2",2000);
Upload_1 u1=(Upload_1)registry.lookup("Uploading");
//File in=new File("/home/ssuman/Public/KALI_LINUX/MyFavourite","something.mp4");
File out=new File("/home/asad/Music","tymaPaulMultithreaded.mp4");
System.out.println("Transferring File---Please be Patient...\n");
File in = u1.Uploads(); // exception thrown here,please check...
FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out);
byte[] buf = new byte[4096];
int i = 0;
while ((i = fis.read(buf)) != -1) {
fos.write(buf, 0, i);
}
if (fis != null) fis.close();
if (fos != null) fos.close();
System.out.println("File Successfully Transferred...");
System.out.println("Congratulations,RMI is working successfully!!!");
}
catch(Exception e){
e.printStackTrace();
}
}
}

服务器端实现者类:-

import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
public class Java_Uploader_1 extends UnicastRemoteObject implements Upload_1 {
public Java_Uploader_1() throws RemoteException{ }

@Override
public File Uploads() throws RemoteException{
File in = new File("/home/ssuman/Public/KALI_LINUX/MyFavourite","something.mp4");
return in;
}
}

服务器类代码:-

import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Java_Server_1 {
public static void main(String[] args) {
try{
Registry registry= LocateRegistry.createRegistry(2000);
System.out.println("Ahh,Server Finally Started---GO,GO,GO...\n");
Java_Uploader_1 ju1=new Java_Uploader_1();
registry.rebind("Uploading",ju1);
System.out.println("Service Bound...");
}
catch(Exception e){
System.out.println("An error occured trying to bind the object to the registry.\n"+e);
}

}
}

我的问题:-

请帮助解决此问题或任何让远程客户端下载我的系统上存在的文件的替代方法。而且,是的,我希望所有这些都使用 Java RMI 来完成,而不是通过 CORBA 或任何其他技术来完成。预先感谢所有评论者和回答海报。

最佳答案

您必须传输文件的内容。为此,您必须更改远程接口(interface)签名:

public interface Upload_1 extends Remote {
void upload(byte[] content) throws RemoteException;
}

客户端发送一个包含文件内容的字节数组,服务器接收它并写入磁盘。

问题是当你使用大文件时,javavm会抛出OOME,所以你必须通过RMI模拟流。

另一种选择是使用现有的库,看看 http://openhms.sourceforge.net/rmiio/

关于java - 文件未找到异常 --- 将文件引用传递给 RMI 客户端时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26943681/

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