kostenloser Webspace werbefrei: lima-city


Dateien versenden Java

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    Hallo, ich möchte über das Netzwerk eine Datei versenden. Die Fehlermeldung lautet:
    Error: Die Engine hat einen Fehler beim Öffnen des InputStreams verursacht.
    Exception in thread \"main\" java.lang.NullPointerException
    at lib.net.TestClient.main(TestClient.java:13)

    Hier ist der Code:

    package lib.net;
    
    import lib.messages.Error;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.File;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.IOException;
    
    public class TCPServer {
            
            protected int port;
            protected ServerSocket server;
            
            public TCPServer( int port ) {
                    this.port = port;
                    try {
                            server = new ServerSocket( port );
                    }
                    catch( IOException ioex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Öffnen des Servers verursacht.\" );
                    }
            }
            
            public void sendFile( File f, Socket client ) {
                    try {
                            OutputStream os = client.getOutputStream();
                            ObjectOutputStream oos = new ObjectOutputStream( os );
                            oos.writeObject( f );
                            oos.close();
                            os.close();
                    }
                    catch( IOException ioex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Versenden des Objekts gemacht.\" );
                    }
            }
            
            public File getFile( Socket client ) {
                    try {
                            InputStream is = client.getInputStream();
                            ObjectInputStream ois = new ObjectInputStream( is );
                            
                            File f = (File)ois.readObject();
                            
                            ois.close();
                            is.close();
                            
                            return f;
                    }
                    catch( ClassNotFoundException cnfex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Empfangen des Objects verursacht.\" );
                            return null;
                    }
                    catch( IOException ioex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Warten auf Clients verursacht.\" );
                            return null;
                    }
            }
            
            public ServerSocket getServer() {
                    return server;
            }
            
            public int getPort() {
                    return port;
            }
            
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    package lib.net;
    
    import lib.messages.Error;
    import java.net.Socket;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    
    public class TCPClient {
            
            protected String host;
            protected int port;
            protected Socket server;
            
            public TCPClient( String host, int port ) {
                    this.host = host;
                    this.port = port;
                    try {
                            server = new Socket( host, port );
                    }
                    catch( IOException ioex ) {
                            Error.throwError( \"Die Engine konnte keine Verbindung zum Server aufbauen\" );
                    }
            }
            
            public void sendFile( File f ) {
                    try {
                            OutputStream os = server.getOutputStream();
                            ObjectOutputStream oos = new ObjectOutputStream( os );
                            oos.writeObject( f );
                            oos.close();
                            os.close();
                    }
                    catch( IOException ioex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Versenden des Objekts gemacht.\" );
                    }
            }
            
            public File getFile() {
                    try {
                            InputStream is = server.getInputStream();
                            ObjectInputStream ois = new ObjectInputStream( is );
                            
                            File f = (File)ois.readObject();
                            
                            ois.close();
                            is.close();
                            
                            return f;
                    }
                    catch( ClassNotFoundException cnfex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Empfangen des Objects verursacht.\" );
                            return null;
                    }
                    catch( IOException ioex ) {
                            Error.throwError( \"Die Engine hat einen Fehler beim Öffnen des InputStreams verursacht.\" );
                            return null;
                    }
            }
            
            public Socket getServer() {
                    return server;
            }
            
            public String getHost() {
                    return host;
            }
            
            public int getPort() {
                    return port;
            }
            
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    package lib.net;
    
    import java.net.Socket;
    import java.io.IOException;
    import java.io.File;
    
    public class TestServer {
            
            public static void main(String[] args) throws IOException {
                    TCPServer server = new TCPServer( 6010 );
                    
                    while( true ) {
                            Socket client = server.getServer().accept();
                            
                            File f = server.getFile( client );
                            
                            server.sendFile( f, client );
                            
                            client.close();
                    }
            }
            
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    package lib.net;
    
    import java.io.IOException;
    import java.io.File;
    
    public class TestClient {
            
            public static void main( String[] args ) throws IOException {
                    File f = new File( \"file://J:/Dokumente und Einstellungen/****/Desktop/WS_FTP.LOG\" );
                    TCPClient client = new TCPClient( \"localhost\", 6010 );
                    client.sendFile( f );
                    File f1 = client.getFile();
                    System.out.println( f1.toString() );
            }
            
    }


    Beitrag geändert: 24.3.2008 19:10:33 von test-server
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Vielleicht solltest du den Code mal irgendwo anders(stichwort: nopaste) hochladen oder ihn wenigstens in die code-tags setzen. Uneingerückt ist er grausam zu lesen.
    Und dann könntest du evntl. noch die Zeile markieren, die die Exception wirft.
  4. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    Problem gelöst! Irgendwo habe ich die Streams und damit auch den Socket geschlosse.

    Beitrag geändert: 25.3.2008 0:17:09 von test-server
  5. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    aber mal eine Frage: Wenn ich ein Fileobjekt serialisiere (Standart) und übers Netz verschicke, dann verschicke ich doch nicht die wirkliche Datei, sondern nur eine Referenz, mit der der andere nichts anfangen kann, oder?

    Danke schonmal im vorraus!
  6. Ich denke einfach, dass du dein File-Object bei einem ObjectOutputStream ja serialisiertst, es also in irgendeiner Form abspeicherst. \"Verschoben\" wird es natürlich nicht. Aber sich den Dateiinhalt zu holen/später wieder ausgeben zu lassen sollte nicht sooo schwer sein, oder?
  7. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    Ich habe ein Objekt File f. Das möchte ich abspeichern. Bitte sag mir wie! Unter einem beliebigem Namen!
  8. Evntl. würde ich einfach den Code der Datei auslesen und den wegschicken:
    RandomAccessFile raf = new RandomAccessFile(new File(\"a.txt\"), \"r\");
    		
    		StringBuilder src = new StringBuilder();
    
    		for(String line; (line = raf.readLine()) != null;)
    			src.append(line+System.getProperty(\"line.separator\"));

    Dann eben ein neues File erstellen und den gegebenen Code da rein schreiben.
  9. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    na herzlichen glückwunsch du torfnase :-)

    dann hab ich hab kein File, sondern ein String gesendet, und das sehr unkomfortabel. Ich hab mir überlegt, dass ich sowas verschicke:

    class PackageString implements Serializable {
          String filename;
          String filecontent;
    }




    // Edit: nur sind meines wissens nach nicht alle dateien stringdateien, d.h. ich brauch ne zweite klasse mit bytearray

    class PackageBytes implements Serializable {
          String filename;
          byte[] filecontent;
    }



    Aber wie unterscheide ich, wann ich was brauch? Allein nach der Endung wie *.txt oder *.mp3 geht ja nicht...

    Beitrag geändert: 25.3.2008 0:52:20 von test-server
  10. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    Hab mir mehrere Pakete erstellt. Auch einen Manager, der die serialisiert, verschickt bzw. empfängt und deserialisiert. Damit kann ich alles ressourcensparend verschicken. Habe heute morgen schon fröhlich ein paar Audiodateien über einen selbst erstellen Echoserver verschickt. Sehr spaßig^^
  11. p**i

    ... kann ich das Thema damit als abgeschlossen betrachten oder kommt noch was?

    *lieber mal nachfragt* :blah:
  12. Autor dieses Themas

    test-server

    test-server hat kostenlosen Webspace.

    Kannst schließen^^
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!