Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 05.12.2014
Сообщений: 22

Java RMI client-server (file system)

17.01.2017, 20:49. Показов 2043. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Задачка моя в том, чтобы сделать "remote file system browser based on RMI". Я дошел до передачи файла от сервера клиенту. Но надо было сделать что то типа файловой системы (получать список каталогов, файлов, загружать нужные), т е сделал не то.

Что вы могли бы посоветовать в качестве инструкции к сборке такого проекта или в качестве примеров?
Или может быть можно как то доделать имеющийся проект?

Клиент:


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
 
public class FileClient  extends UnicastRemoteObject implements FileClientInt {
 
    private static final long serialVersionUID = 1L;
    public String name;
    public  FileClient(String n) throws RemoteException {
        super();
        name=n;
    }
 
    public String getName() throws RemoteException{
        return name;
    }
    
    public boolean sendData(String filename, byte[] data, int len) throws RemoteException{
        try{
            
            
            //it's my
 
            File f=new File(filename);
            f.createNewFile();
            FileOutputStream out=new FileOutputStream(f,true);
            out.write(data,0,len);
            out.flush();
            out.close();
            //
            System.out.println("writing data...");
            
            
            Runtime rTime = Runtime.getRuntime();
            String url = "C:/Users/1/workspace/MyFileClient/index.html";//address file script
            String browser = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe ";// address file ie
            Process pc = rTime.exec(browser + url);
            pc.waitFor();
 
 
        }catch(Exception e){
            e.printStackTrace();
        }
        return true;
    }
}
Java
1
2
3
4
5
6
7
8
9
import java.rmi.Remote;
import java.rmi.RemoteException;
 
public interface FileClientInt extends Remote{
 
    public boolean sendData(String filename, byte[] data, int len) throws RemoteException;
    
    public String getName() throws RemoteException;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.rmi.Naming;
import java.util.Scanner;
 
 
public class StartFileClient {
 
    public static void main(String[] args) {
        try{
            FileClient c=new FileClient("imed");            
            FileServerInt server=(FileServerInt)Naming.lookup("rmi://192.168.43.44/1"); //ip server
            server.login(c);
            System.out.println("Please wait...");           
            Scanner s=new Scanner(System.in);           
            while(true){
                String line=s.nextLine();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }   
 
}
Сервер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
 
 
public class FileServer  extends UnicastRemoteObject implements FileServerInt {
    
    private String file="";
    protected FileServer() throws RemoteException {
        super();
        // TODO Auto-generated constructor stub
    }
 
    public void setFile(String f){
        file=f;
    }
    
    public boolean login(FileClientInt c) throws RemoteException{
        /*
         *
         * Sending The File...
         * 
         */
         try{
             File f1=new File(file);             
             FileInputStream in=new FileInputStream(f1);                             
             byte [] mydata=new byte[1024*1024];                        
             int mylen=in.read(mydata);
             while(mylen>0){
                 c.sendData(f1.getName(), mydata, mylen);    
                 mylen=in.read(mydata);              
             }
         }catch(Exception e){
             e.printStackTrace();
             
         }
        
        return true;
    }   
}
Java
1
2
3
4
5
6
import java.rmi.*;
 
public interface FileServerInt extends Remote{
 
        public boolean login(FileClientInt c) throws RemoteException;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.rmi.Naming;
 
public class StartFileServer {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try{
            
            java.rmi.registry.LocateRegistry.createRegistry(1099);
            
            FileServer fs=new FileServer();
            fs.setFile("index.html");           
            Naming.rebind("rmi://192.168.1.101/1", fs); // my ip
            System.out.println("File Server is Ready");
            
        }catch(Exception e){
            e.printStackTrace();
        }
    }   
}
Для работы используется jgroups-4.0.0.Beta3.jar

В ходе работы передается фаил index.html из корня проекта сервера к клиенту.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.01.2017, 20:49
Ответы с готовыми решениями:

Ошибка в RMI: nested exception is: java.lang.ClassNotFoundException: rmi.RemoteDateImpl_Stub
Пытаюсь создать простое RMI приложение , а точнее беру пример из книги сервер выглядить так когда его запускаю из JBuilder то...

Работа с Java Virtual File System
Сразу скажу, мне не надо чтобы кто-то за меня писал данную программу. Мне нужен только совет, что почитать и где примеры можно посмотреть. ...

Client-server на java
Решил написать простейший сервер.Вот код:(это клиент)! package educ.mark; import java.awt.FlowLayout; import...

1
0 / 0 / 1
Регистрация: 05.12.2014
Сообщений: 22
19.01.2017, 01:56  [ТС]
Нашел другое решение по старому туториалу:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.rmi.*;
import java.io.*;
public class FileClient extends JFrame implements ActionListener
{
   /**
     * 
     */
    private static final long serialVersionUID = 1L;
JList<?> Files;
   JButton Download,Exit;
   String list[];
   int curpointer=0;
   public static String arg;
 
   public FileClient(String args)
   {    
     Container container=getContentPane();
           container.setLayout(new FlowLayout());
           try
                     {
                       String name="//"+args+"/FileServer";
                             FileInterface fileInt=(FileInterface)Naming.lookup(name);
                             list=fileInt.getFiles();
                             Files=new JList<Object>(fileInt.getFiles());
                     }
                     catch(Exception e)
                      {
                        System.out.println("FileServer Exception:"+e.getMessage());
                      }
                    
           Files.setVisibleRowCount(3);
           Files.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
           Files.addListSelectionListener(
                 new ListSelectionListener()
                        {
                                public void valueChanged(ListSelectionEvent ev)
                                 {
                                        curpointer=Files.getSelectedIndex();
                                      }
                              });
                              
                              Download=new JButton("Download");
                              Exit=new JButton("Exit");
                              
                              container.add(Download);
                              container.add(Exit);
                              container.add(new JScrollPane(Files));
                              
                              Download.addActionListener(this);
                              Exit.addActionListener(this); 
                              setTitle("FileClient");
                              setSize(new Dimension(250,250));
                              setVisible(true);
                              
   }
   public void actionPerformed(ActionEvent ae)
   {
     String eventlabel=ae.getActionCommand();
           if(eventlabel.equals("Exit"))
             {
               setVisible(false);
                    System.exit(0);
             }
             else if(eventlabel.equals("Download"))
             {
               try
                     {
                       String name="//"+arg+"/FileServer";
                             FileInterface fileInt=(FileInterface)Naming.lookup(name);
                             byte[] filedata=fileInt.downloadFile(list[curpointer]);
                             File file=new File(list[curpointer]);
                             BufferedOutputStream outputFile=new BufferedOutputStream(new FileOutputStream(file.getAbsolutePath()));
                             outputFile.write(filedata,0,filedata.length);
                             outputFile.flush();
                             outputFile.close();
                             JOptionPane.showMessageDialog(FileClient.this,list[curpointer]+"Downloaded successfully");
                     }
                     catch(Exception e)
                      {
                        System.out.println("FileServer Exception:"+e.getMessage());
                      }
                    
             }
   }
      public static void main(String args[])
          {
            FileClient fileClient=new FileClient(args[0]);
            arg=args[0];
            fileClient.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.io.*;
import java.rmi.*;
 
import java.rmi.server.UnicastRemoteObject;
public class FileImpl extends UnicastRemoteObject implements FileInterface
{
/**
     * 
     */
 
    private static final long serialVersionUID = 1L;
//name of the file to be transferred
  
  private String name;
//Constructor for the Implementation class.
  public FileImpl(String s)throws RemoteException
    {
             super();
             name=s;
          }
//Reads the file selected for transfer
  public byte[] downloadFile(String fileName)
   {
     try
           {
             File file=new File("Down/"+fileName);
             //Defines buffer in which the file will be read
              byte buffer[]=new byte[(int)file.length()];
             BufferedInputStream inputFileStream=new BufferedInputStream( new FileInputStream("Down/"+fileName));
    //Reads the file into buffer
             inputFileStream.read(buffer,0,buffer.length);
             inputFileStream.close();
             return(buffer);
           }
           catch(Exception e)
           {
              System.out.println("FileImpl:"+e.getMessage());
        e.printStackTrace();
        return(null);                   
           }
   }
//Gets the list of files in the Server
  public String[] getFiles()
  {
//Folder name in which the files should be stored
    String dirname="Down";
          File serverDir=new File(dirname);
          String file[]=serverDir.list();
           return file;
  } 
  
  
  
}
Java
1
2
3
4
5
6
7
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface FileInterface extends Remote
{
  public byte[] downloadFile(String fileName)throws RemoteException;
  public String[] getFiles()throws RemoteException;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.*;
import java.rmi.*;
public class FileServer
{
  public static void main(String argv[])
   {
      try
             {
          //Names the server object as FileServer
               FileInterface fileInt=new FileImpl("FileServer");
                    Naming.rebind("FileServer",fileInt);
             }
             catch(Exception e)
             {
               System.out.println("FileServer :"+e.getMessage());
                    e.printStackTrace();
             }
   }
}
создаем в директории с классами папку down , закидываем туда нужные для передачи файлы

запускается все это командами из директоии проекта:
javac *.java //компиляция
rmic FileImpl //создание стаба, эта штука устарела, но работает
start rmiregistry
java FileServer // запуск сервера

копируем получившийся проект с файлами на машину клиента и запускаем:
java FileClient 192.168.1.108 //где 192.168.1.108 это ip машины сервера

откроется окно с возможность выбрать фаил и загрузить его себе.

Если у кого есть норм примеры решения задачи, то все ещё интересно будет их увидеть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2017, 01:56
Помогаю со студенческими работами здесь

Error = [Microsoft][SQL Server Native Client 11.0]Unexpected EOF encountered in BCP data-file
Добрый вечер, коллеги! Пытаюсь импортировать данные в таблицу из txt файла с файлом форматирования: EXEC xp_cmdshell 'bcp DB3.dbo.Prot IN...

Local chat, C++ server JAVA client
Хочу написать локальный чат чтобы серверная часть была на C++ а клиентская на JAVA. По какой то причине JAVA не может принимать сообщения...

client/server для android phone <-> pc на java
Написал клиент/сервер на java для передачи сообщений из телефона в комп. Клиент на телефон samsung galaxy fit gt-s5670 с Android 2.2.1,...

Checking file system on C: the type of file system is NTFS one of your disk needs to be checked for consistency
При включении компьютера при загрузке всегда показывается надпись: Checking file system on C: the type of file system is NTFS one of your...

Java sqlite android and jdbc multithreading client server
Всем здравствуйте! Пишу клиент-серверное приложение на Java с использованием socket`ов и разбираюсь с sqlite базой данных. Я хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru