Obsługa sieci Java

0

Witam
Potrzebuje zrobić aplikację klient-serwer w javie. Ma ona wyszukiwać pliki w podanym na serwerze folderze, porównywać czy plik x na serwerze jest taki sam jak u klienta. Mam dużo więcej do zrobienia ale od czegoś trzeba zacząć. Jakby ktoś mógł mi pomóc byłbym wdzięczny :)

0

Jakiej pomocy oczekujesz? :P

0

Największy problem mam ze zrobieniem tego by połączyć klienta, serwer z funkcją robienia kopii danych

pierwszy jest serwer:

 import java.net.*;
import java.io.*;
import java.util.*;

public class ObjectServer {
ServerSocket gniazdo;

public ObjectServer(int port){
    System.out.println("Próbuję połączyć się z portem"+port);
    try{
        gniazdo = new ServerSocket(port);
    }
    catch (Exception e) {
        System.out.println("Wyjątek: "+ e);
        System.exit(1);
    }
}
    
    public static void main(String[] args) {
     int port=3245;
     if (args.length > 0){
         try{
             port = Integer.parseInt(args[0]);
         }
         catch (Exception e){
             port = 3245;
         }
     }
     ObjectServer server = new ObjectServer(port);
     System.out.println("Serwer działa na porcie nr: "+ port);
     server.dzialaj();
    }
    
public void dzialaj(){
    try{
        System.out.println("Oczekuje na połączenie z użytkownikiem...");
        while(true) {
            Socket gniazdoReq = gniazdo.accept();
            System.out.println("Połączyłem się z: " + gniazdoReq.getInetAddress().getHostName()); 
            
          serviceClient(gniazdoReq);
        }
    }
    catch(IOException e){
        System.out.println("Wyjątek: "+e);        
    }
}

public void serviceClient(Socket s) {
ObjectOutputStream outStream; //referencja do strumienia wyjs´ciowego, przez który wysyłane sa˛ dane
ObjectInputStream inStream;
try {
outStream = new ObjectOutputStream(s.getOutputStream());
inStream = new ObjectInputStream(s.getInputStream());


}
catch (Exception e) {
e.printStackTrace();
}
}
}

teraz client:

import java.io.*;
import java.net.*;
import java.util.*;

public class ObjectClient {
    Socket gniazdo;
    ObjectInputStream inStream = null;
    ObjectOutputStream outStream = null;

public ObjectClient(String host, int port) throws
    UnknownHostException, IOException {
    gniazdo = new Socket(host, port);
    outStream = new ObjectOutputStream( gniazdo.getOutputStream());
    inStream = new ObjectInputStream(gniazdo.getInputStream());
}
    
        public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        boolean finished = false;
        
        try { 
        ObjectClient client = new ObjectClient("192.168.2.101", 3245);
        System.out.println("Podaj numer karty: ");
  }
        catch (Exception e) {
        System.out.println ("Wyjątek : " + e);
        e.printStackTrace();
        }
}
} 

jest to serwer i klient i to mi działa, tzn klient łączy się z serwerem, ale ma jeszcze plik skopiować, tzn zrobić kopie zapasową i to ma być na serwerze obsługiwać ma to klient. Mam nadzieje że się dobrze wyraziłem o co mi chodzi

0

zapomniałem dodać kod

kod robienia kopii zapasowej

package objectserver;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class KopiowanieKatalogu
{
    public static void main(String[] args)
    {	
    	File srcFolder = new File("c:\\folder");
    	File destFolder = new File("c:\\folder-nowy");
    	
    	//upewnij się że źródło istnieje
    	if(!srcFolder.exists()){

           System.out.println("Katalog nie istnieje.");
           //po prostu wyjdź
           System.exit(0);

        }else{

           try{
        	copyFolder(srcFolder,destFolder);
           }catch(IOException e){
        	e.printStackTrace();
        	//błąd, po prostu wyjdź
                System.exit(0);
           }
        }
    	
    	System.out.println("Gotowe");
    }
    
    public static void copyFolder(File src, File dest)
    	throws IOException{
    	
    	if(src.isDirectory()){
    		
    		//Jeśli katalog nie istnieje należy go utworzyć
    		if(!dest.exists()){
    		   dest.mkdir();
    		   System.out.println("Katalog kopiuję z " 
                              + src + "  do " + dest);
    		}
    		
    		//Lista całej zawartości katalogu
    		String files[] = src.list();
    		
    		for (String file : files) {
    		   //Skonstruować strukture src i plik docelowy
    		   File srcFile = new File(src, file);
    		   File destFile = new File(dest, file);
    		   //rekurencyjnie kopiuję
    		   copyFolder(srcFile,destFile);
    		}
    	   
    	}else{
    		//jeśli plik, następnie skopiuj go
    		//Uzyj strumień bajtów do obsługi wszystkich typów plików
    		InputStream in = new FileInputStream(src);
    	        OutputStream out = new FileOutputStream(dest); 
    	                     
    	        byte[] buffer = new byte[1024];
    	    
    	        int length;
    	        //skopiować zawartość pliku w bajtach 
    	        while ((length = in.read(buffer)) > 0){
    	    	   out.write(buffer, 0, length);
    	        }
 
    	        in.close();
    	        out.close();
    	        System.out.println("File copied from " + src + " to " + dest);
    	}
    }
} 
0

W poleceniu nie ma nic o kopiowaniu.

0

To znaczy serwer i klienta sam zrobiłem. Kod do przeróbki dał Nam wykładowca. Mieliśmy zrobić server i klienta i ten kod dodać by działało to w sieci i tu jest problem

0

To chwila.
Jakie jest w sumie pytanie?

0

ten ostatni kod który wrzuciłem dodać do klienta i serwera w taki sposób by można było zrobić kopie zapasową na serwerze

0

jeżeli dałoby radę to byłbym bardzo wdzięczy za dołączenie tego kodu do serwera-klienta w taki sposób aby działało. Ja bym dalej sobie przerobił. Nie mam pojęcia jak się za to zabrać

0

I myślę, że poszedłem w złą stronę. Chcę polegać na Waszej wiedzy, ale może ktoś wyjaśni mi te moje 3 kody co robią. Linijka po linijce. Zrobiłem je wzorując się na innych i może rozumiejąc je szybciej sam zrobię. Mogę na taką pomoc liczyć?

1

Kod prowadzącego wykonuje kopiowanie w ramach jednego komputera. Więc musisz nie tylko połączyć go swoim kodem (czyli wywołać coś z czegoś), ale też zmodyfikować część jego kodu (tą która w procesie kopiowania nazwać można zapisem, bo odczyt zostawić można bez zmian chyba) tak, by działała za pośrednictwem twojej klasy na zdalnym komputerze...

Po namyśle stwierdzam, że w zasadzie to kod prowadzącego można użyć i po stronie klienta i po stronie serwera, a wtedy powinieneś zmodyfikować go tak, by można go było użyć do odczytu pliku i zapisu go do strumienia wyjściowego z klienta i jednocześnie tak by można było go użyć do zapisu pliku odczytywanego ze strumienia wejściowego na serwerze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1