Moin!
Ich habe folgendes Anliegen:
Ich möchte Dateien in ihren Verzeichnisstrukturen von einem Rechner auf einen Server übertragen. Der Server läuft und lauscht auf einen Port. Der Client kann momentan eine Datei übertragen, die auch sauber ankommt. Hier mal
der Code:
Ich würde nun gerne anstatt ersteDatei.pdf und andereDatei.pdf gerne einen "relativen" Verzeichnisbaum übergeben (also alles was unterhalb des Startverzeichnisses der java Anwendung liegt) und auf der Serverseite diese Verzeichnisstruktur replizieren und mit den entsprechenden Dateien der Clientseite "befüllen" .
Gibt es schon irgendwelche sinnvollen Klassen, die vielleicht eine Verzeichnisstruktur liefern, die ich mit 'mkdirs' auf der anderen Seite erzeugen kann, so dass ich die hier beschriebenen Klassen weiterverwenden kann? Oder sollte ich da besser einen ganz anderen Weg gehen? Socketverbindung muss sein und die Abbildung des relativen VErzeichnbaumes...
Wichtig ist halt vor allem, das ich von einem Fileobjekt relative Pfade bekomme...
Gruß ConBug
PS: Ähhh ich suche hier keine perfekte Lösung...nur eine Idee, wie ich da rangehen kann :shock:
Ich habe folgendes Anliegen:
Ich möchte Dateien in ihren Verzeichnisstrukturen von einem Rechner auf einen Server übertragen. Der Server läuft und lauscht auf einen Port. Der Client kann momentan eine Datei übertragen, die auch sauber ankommt. Hier mal
der Code:
Code:
****************************************************
Server Class
****************************************************
import java.io.*;
import java.net.*;
public class Server
{
private int port;
Server()
{
port = 1024;
}
Server(int port)
{
this.port = port;
}
public int getPort()
{
return port;
}
public void start()
{
System.out.println("\nServer gestartet!\n----------------");
char[] whirl = {'|','/','-','\\'};
byte[] buffer = new byte[65536];
int len;
try
{
ServerSocket serverSock = new ServerSocket(port);
Socket inSock;
while(true)
{
try
{
inSock = serverSock.accept();
InputStream in = inSock.getInputStream();
int fnameLen = in.read();
in.read(buffer, 0, fnameLen);
String fname = new String();
char[] array = new char[fnameLen];
for (int i=0; i < fnameLen; i++)
fname = fname + (array[i] = (char) buffer[i]);
System.out.print(">> Uebertragung: '" + fname + "' ");
FileOutputStream fos = new FileOutputStream(fname);
int w = 0;
int x = 0;
while ((len = in.read(buffer)) != -1)
{
if (x == 300)
{
System.out.print("\b" + whirl[w++]);
if (w == 4)
w=0;
x=0;
}
fos.write(buffer, 0, len);
x++;
}
fos.close();
System.out.println("\b beendet!");
in.close();
inSock.close();
}
catch(IOException e)
{
System.err.println("Eine Verbindung ist fehlgeschlagen!");
System.err.println("Grund: " + e.getMessage());
System.err.println("Server weiterhin aktiv...");
}
}
}
catch(IOException e)
{System.err.println("Fehler bei I/O!: " + e.getMessage());}
System.out.println("----------------\nServer beendet!");
}
}
****************************************************
Server Run
****************************************************
public class ServerTest
{
public static void main(String[] args)
{
Server myServer;
myServer = new Server(1024);
myServer.start();
}
}
****************************************************
****************************************************
Client Class
****************************************************
import java.io.*;
import java.net.*;
public class ClientV2
{
private String dateiname, serverIP;
private int buffersize, serverPort;
ClientV2(String dateiname, String serverIP)
{
this.dateiname=dateiname;
this.serverIP=serverIP;
buffersize=1024;
serverPort=1024;
}
ClientV2(String dateiname, String serverIP, int buffersize, int serverPort)
{
this.dateiname=dateiname;
this.serverIP=serverIP;
this.buffersize=buffersize;
this.serverPort=serverPort;
}
void datenUebertragen()
{
System.out.println("Client gestartet!\n----------------");
byte[] buffer = new byte[buffersize];
int len = 0;
try
{
Socket outSock = new Socket(serverIP, serverPort);
OutputStream out = outSock.getOutputStream();
String fname = dateiname;
int fnameLen = fname.length();
out.write(fnameLen);
buffer = fname.getBytes();
out.write(buffer, 0, fnameLen);
FileInputStream fis = new FileInputStream(fname);
while ((len=fis.read(buffer)) != -1)
{
out.write(buffer, 0, len);
}
fis.close();
out.close();
outSock.close();
System.out.println("----------------\n Client getötet");
}
catch(IOException e)
{
System.err.println("Das war wohl nix! 6 setzen: "+ e.getMessage());
}
}
}
****************************************************
Client Run
****************************************************
public class TestClient
{
public static void main(String[] args)
{
ClientV2 myClient1;
ClientV2 myClient2;
myClient1=new ClientV2("ersteDatei.pdf", "192.168.1.4", 1024, 1024);
// myClient2=new ClientV2("andereDatei.gif", "192.168.1.4", 1024, 1024);
myClient1.datenUebertragen();
// myClient2.datenUebertragen();
}
}
****************************************************
****************************************************
Ich würde nun gerne anstatt ersteDatei.pdf und andereDatei.pdf gerne einen "relativen" Verzeichnisbaum übergeben (also alles was unterhalb des Startverzeichnisses der java Anwendung liegt) und auf der Serverseite diese Verzeichnisstruktur replizieren und mit den entsprechenden Dateien der Clientseite "befüllen" .
Gibt es schon irgendwelche sinnvollen Klassen, die vielleicht eine Verzeichnisstruktur liefern, die ich mit 'mkdirs' auf der anderen Seite erzeugen kann, so dass ich die hier beschriebenen Klassen weiterverwenden kann? Oder sollte ich da besser einen ganz anderen Weg gehen? Socketverbindung muss sein und die Abbildung des relativen VErzeichnbaumes...
Wichtig ist halt vor allem, das ich von einem Fileobjekt relative Pfade bekomme...
Gruß ConBug
PS: Ähhh ich suche hier keine perfekte Lösung...nur eine Idee, wie ich da rangehen kann :shock: