Server/Client Verbindung - Datei schreiben

Status
Nicht offen für weitere Antworten.

rapthor

Bekanntes Mitglied
Hallo,

ich weiß dass hier überall Schnipsel hilfreicher Informationen herumliegen, aber diese alle zu MEINER Lösung zusammenzusuchen würde viel Zeit beanspruchen und daher wollte ich hier einmal meinen Quelltext für einen Clienten als auch einen Server darstellen und die Frage stellen, wie ich in der Server Applikation die Datei

"test.tst"

die ja vom Clienten kommen soll auf die Festplatte schreiben lassen kann? Wohin genau auf der Festplatte, ist erstmal egal. Mir geht es rein um's Prinzip. Welchen Input / OutputStream muss ich verwenden ... ich habe leider nicht so viel Ahnung von Streams und habe das meiste selber nur so zusammengesucht.

Code:
import java.io.*;
import java.net.*;

class DateiTransferClient {

    ObjectOutputStream ausgang;
	ObjectInputStream eingang;

	public void runClient() {

		Socket clientSocket;

		try {
			System.out.println("Versuche Verbindung aufzubauen ...");

			// Wo ist der Server ?
			clientSocket = new Socket(
            	InetAddress.getByName("127.0.0.1"), 2000);

         	ausgang = new ObjectOutputStream(
                      clientSocket.getOutputStream() );
        	ausgang.flush();

        	eingang = new ObjectInputStream(
            		  clientSocket.getInputStream() );
		}
		catch (ConnectException ce) {
			System.out.println("Verbindung fehlgeschlagen ! Firewall ? Server nicht aktiv ?\n");
			//ce.printStackTrace();
		}
		catch (EOFException eof) {
			System.out.println("EOF Fehler !\n");
		}
		catch (IOException io) {
			System.out.println("I/O Fehler !\n");
			//io.printStackTrace();
		}

		try {
			this.sendData( new File("c:test.tst") );
		}
		catch (NullPointerException np) {
			System.out.println("NullPointer irgendwas .... wegen der Datei\n");
		}

	}



   private void sendData( File datei )
   {
      try {
         // Füllen des Buffers
         ausgang.writeObject(datei);

         // Losschicken der Daten im Buffer
         ausgang.flush();
         System.out.println( "\nDatei geschickt !");
      }
      catch ( IOException cnfex ) {
         System.out.println(
            "\nFehler beim Senden der Datei !" );
      }
   }



   public static void main(String[] args) {

      DateiTransferClient app = new DateiTransferClient();
      app.runClient();
   }

}

^---- Das ist der Client




Code:
import java.io.*;
import java.net.*;

class DateiTransferServer {

    ObjectOutputStream ausgang;
	ObjectInputStream eingang;

	public void runServer() {

     	ServerSocket serverSocket;
        Socket verbindungsSocket;

      try {

         serverSocket = new ServerSocket( 2000 , 100 );

         while ( true ) {

            System.out.println( "Warte auf Verbindung ..." );
            verbindungsSocket = serverSocket.accept();

            System.out.println( "Verbindung mit " +
               verbindungsSocket.getInetAddress().getHostName() );

            ausgang = new ObjectOutputStream(
                        verbindungsSocket.getOutputStream() );
            ausgang.flush();

            eingang = new ObjectInputStream(
                        verbindungsSocket.getInputStream() );

            System.out.println( "Empfange Daten ...." );

/*
            do {


               try {

                  // Hier soll die Datei geschrieben werden,
                  // die vom Client empfangen wird (test.tst) !!

               }
               catch ( ClassNotFoundException cnfex ) {
                  System.out.println("Unbekannter Objekttyp !");
               }

            } while (  /* !Abbruchbedingung */ );

*/


            // Verbindung beenden
            System.out.println( "Verbindung wird unterbrochen ..." );
            ausgang.close();
            eingang.close();
            verbindungsSocket.close();
            System.out.println( "BEENDET !" );
         }
      }
      catch ( EOFException eof ) {
         System.out.println( "Client hat die Verbindung unterbrochen !" );
      }
      catch ( IOException io ) {
         System.out.println( "IO Fehler !" );
         io.printStackTrace();
      }
	}


   public static void main(String[] args) {

      DateiTransferServer app = new DateiTransferServer();
      app.runServer();
   }

}

^--- Und das ist mein Server !

Ich hoffe man kann mir hier ein wenig helfen .... wäre dafür wirklich sehr dankbar.

Rapthor
 

Dante

Bekanntes Mitglied
Hm, warum nicht einfach den InputStream des Sockets in nen FileOutputStream schreiben?
 
G

Guest

Gast
An welcher Stelle meinst du jetzt? Und was genau muss ich dafür umschreiben ..... :oops:
 

rapthor

Bekanntes Mitglied
Meine Server Applikation sieht jetzt folgendermaßen aus ......


Code:
import java.io.*;
import java.net.*;

class DateiTransferServer {

	ObjectInputStream eingang;

	public void runServer() {

     	    File datei = new File("c:\\test.jap");

     	    ServerSocket serverSocket;
                    Socket verbindungsSocket;

                      try {

                         serverSocket = new ServerSocket( 2000 , 100 );

                         while ( true ) {

                            System.out.println( "Warte auf Verbindung ..." );
                            verbindungsSocket = serverSocket.accept();

                            System.out.println( "Verbindung mit " +
                                     verbindungsSocket.getInetAddress().getHostName() );

                            eingang = new ObjectInputStream(
                                     verbindungsSocket.getInputStream() );

                            System.out.println( "Empfange Daten ...." );

                            try{
                                           // Was muss ich hier machen, damit die Datei,
                                           // die über "eingang" kommt, ordnungsgemäß
                                           // gespeichert wird undzwar als "c:\test.jap" ?

	                    }
	                    catch(Exception e){}



            // Verbindung beenden
            System.out.println( "Verbindung wird unterbrochen ..." );

            verbindungsSocket.close();
            ausgang.close();

            System.out.println( "BEENDET !" );
         }
      }
      catch ( EOFException eof ) {
         System.out.println( "Client hat die Verbindung unterbrochen !" );
      }
      catch ( IOException io ) {
         System.out.println( "IO Fehler !" );
         io.printStackTrace();
      }
	}


   public static void main(String[] args) {

      DateiTransferServer app = new DateiTransferServer();
      app.runServer();
   }

}

Wie schaff ich es jetzt, dass mir die Daten, die über den ObjectInputStream kommen als C:\test.jap Datei abgespeichert werden?
Ich habe sichergestellt, dass über den ObjectInputStream wirklich eine Datei geschickt wird.
 

meez

Top Contributor
Ueber ObjectInputStream/ObjectOuputStream kann man keine "Dateien" senden, sondern nur Objekte...
Das File Object, welches du senden willst, entält nur Metadaten über die Datei, aber nicht deren Inhalt.

Wenn du die Datei schreiben willst, geht das so:



Beim Client die Daten Senden:

Code:
OuputStream out = clientSocket.getOutputStream();
InputStrem in = new FileInputStream("c:\\test.tst");
byte[] buffer = new byte[1024];
int n;

while ((n = in.read(buffer)) != -1)
   out.write(buffer, 0, n);


Beim Server die Daten Empfangen, und auf die Platte schreiben:

Code:
InputStream in = verbindungsSocket.getInputStream();
OuputStream out = new FileOuputStream("c:\\test.jap");

byte[] buffer = new byte[1024];
int n;

while ((n = in.read(buffer)) != -1)
   out.write(buffer, 0, n);
 

rapthor

Bekanntes Mitglied
Ui,

also im Grunde genommen funktioniert das jetzt bei mir auch ... dank deiner Hilfe. Allerdings ist die empfangene Datei immer 2 Byte größer, als die, die ich losgeschickt habe.
Undzwar entstehen diese zusätzlichen Informationen am ANFANG der neuen Datei ... danach ist alles wie im Original.
 

rapthor

Bekanntes Mitglied
Hat geklappt .. hab irgendwo was doppelt zugewiesen ... jetzt stimmen die Dateigrößen wieder :)
 

rapthor

Bekanntes Mitglied
Warum spuckt mir die Server Applikation denn plötzlich diesen fehler aus, wenn sie ganz normal den Port 10000 benutzen soll ?

Code:
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at java.net.SocketInputStream.read(SocketInputStream.java:182)
        at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java
:2133)
        at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(Object
InputStream.java:2313)
        at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStre
am.java:2380)
        at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream
.java:2539)
        at java.io.ObjectInputStream.read(ObjectInputStream.java:794)
        at java.io.InputStream.read(InputStream.java:89)
        at DateiTransferServer.runServer(DateiTransferServer.java:48)
        at DateiTransferServer.main(DateiTransferServer.java:82)

Mein Server erstellt zwar die Datei, aber sie ist danach leer!
Grade eben ging's noch ... arg was hab ich jetzt gemacht? Hat einer ne Ahnung?
 

rapthor

Bekanntes Mitglied
Geht wieder alles ...
hab das Programm jetzt mit nem Rechner hinter einer Firewall getestet ... ich selber sitze auch hinter einer Firewall. Allerdings müssten Port 80 und 21 funktionieren. Wenn ich aber meine Programme jetzt auf diesem Port laufen lasse, kriegt er dennoch keine Verbindung aufgebaut.
 

meez

Top Contributor
rapthor hat gesagt.:
Geht wieder alles ...
hab das Programm jetzt mit nem Rechner hinter einer Firewall getestet ... ich selber sitze auch hinter einer Firewall. Allerdings müssten Port 80 und 21 funktionieren. Wenn ich aber meine Programme jetzt auf diesem Port laufen lasse, kriegt er dennoch keine Verbindung aufgebaut.

Wenns eine Packetfilter FW ist, dann wird sie merken, dass du ein unerlaubtes Protokoll benutzt...Oder du benutzt schon von Anfang an eine unerlaubte IP...
 

rapthor

Bekanntes Mitglied
Bei mir ist es der Router mit integrierter Firewall ... nen Vigor 2300. Gibt es keine Möglichkeit dem irgendwie vorzugaukeln dass mein JAVA Programm nen "liebes" ist und über Port 80 oder 21 gehen darf?
 

rapthor

Bekanntes Mitglied
Kann man dem Server nicht auftragen, die Daten über den 80er Port nach außen zu tunneln? Sagen wir mal über das HTTP Protokoll.
 

rapthor

Bekanntes Mitglied
Das Programm führe ich als Administrator meines Windows XP Systems aus. Entspricht also dem ROOT eines LINUX Systems, wenn ich mich nicht täusche. Aber was hat dass Ausführen als Admin damit zu tun, ob die Firewall mich durchlässt oder nicht? Die Firewall interessiert es doch nicht ob ich im eigenen System der Admin bin.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
H Socket Client server,verbindung läst sich nicht abbauen&code optimierung Netzwerkprogrammierung 3
H Server und Client-keine verbindung über den localhost Netzwerkprogrammierung 6
B Verbindung zwischen Client und Server Netzwerkprogrammierung 2
F Java Client-Server-Client Verbindung Netzwerkprogrammierung 9
W Socket Client-Server Verbindung. Wie Strings senden? Netzwerkprogrammierung 6
T Server Client Verbindung halten ,wie? Netzwerkprogrammierung 3
hieuhp132 Server wird nicht auf zweiten Anfrage von Client geupdated Netzwerkprogrammierung 3
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
K C# Server - Android Client Netzwerkprogrammierung 0
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
E Thematik Client server Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
J Client Server - Serialisierung Netzwerkprogrammierung 8
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
K Client => Server Netzwerkprogrammierung 2
A ? Home-Network, Server/Client-Einrichtung Netzwerkprogrammierung 4
S Socket Server: ConnectionError vom Client erkennen Netzwerkprogrammierung 31
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
N Client-Server-Datenbank Netzwerkprogrammierung 13
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
B Client/Server Connection Problem Netzwerkprogrammierung 2
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
R Server zu Client Kommunikation Netzwerkprogrammierung 11
T Server und Client verbinden nicht Netzwerkprogrammierung 6
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
Z Socket Server/Client vernünftiger Verbindungsabbruch Netzwerkprogrammierung 4
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
F TCP Server/Client Netzwerkprogrammierung 14
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
N eine klasse mit server & client Netzwerkprogrammierung 5
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
S Socket Einfache Client/Server-Anwendung Netzwerkprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben