RMI 서버측의 파일 데이터 수신 예
클라이언트에서 서버로 파일을 전달할 때는 파일 데이터를 byte 배열로 읽어서 서버측 메소드의 파라미터로 전달해주면 된다.
public void setFiles(FileInfo[] info) throws RemoteException { // 클라이언트가 호출할 서버측의 메소드
FileOutputStream fout = null;
String dir = "C:/";
for(int i=0;i<info.length;i++){
try{
fout = new FileOutputStream(dir+info[i].getFilename());
fout.write(info[i].getFiledata()); // 클라이언트에서 전달한 파일데이터(byte[])를 서버측의 디스크에 기록한다.
fout.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
RMI 클라이언트측에서 파일 데이터를 서버로 전송하는 예
public static void main(String[] args) throws Exception {
RmiServer obj = (RmiServer)(Naming.lookup("rmi://208.xxx.xxx.121:1099/RemoteObject"));
File [] f = new File[2];
f[0] = new File("D:/JavaTest/HelloWorld.java");
f[1] = new File("D:/JavaTest/HelloWorld.class");
FileInfo[] finfo = new FileInfo[2];
for(int i=0;i<f.length;i++){ // 2개의 파일을 읽어서 byte[]에 담아서 서버측 메소드에 전달하면 된다.
int len = (int)f[i].length();
FileInputStream fin = new FileInputStream(f[i]);
byte[] data = new byte[len];
fin.read(data);
finfo[i] = new FileInfo();
finfo[i].setFilename(f[i].getName());
finfo[i].setFiledata(data);
}
obj.setFiles(finfo);
}
위에서 사용된 FileInfo 클래스
package netserver;
import java.io.Serializable;
public class FileInfo implements Serializable{
private String filename;
private byte[] filedata;
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public byte[] getFiledata() {
return filedata;
}
public void setFiledata(byte[] filedata) {
this.filedata = filedata;
}
}