# ObjectStream Client/Server



## Javhvddfg (22. Jun 2011)

Ich versuche derzeit ein kleines Client/Server-Programm zu schreiben. Habe allerdings Probleme mit dem ObjectInput/ bzw. OutputStream.

Hier mein Programm

Server:


```
package Server;

import java.awt.Toolkit;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

public class Test extends javax.swing.JFrame {

    final int SCREENw = Toolkit.getDefaultToolkit().getScreenSize().width;
    final int SCREENh = Toolkit.getDefaultToolkit().getScreenSize().height;
    int formW;
    int formH;

    public Test() {
        initComponents();
        formW = getSize().width;
        formH = getSize().height;
        setLocation(SCREENw / 2 - formW / 2, SCREENh / 2 - formH / 2);
    }

    /*Netbeans generierter Code*/                                                                                            

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
                } catch (Exception e) {
                    System.out.println(e);
                }

                new HackanonymServer().setVisible(true);
            }
        });
    }
             

    public class Server implements Runnable {

        int port;
        ServerSocket ss;

        public Server(int port) {
            this.port = port;
        }

        @Override
        public void run() {
            try {
                ss = new ServerSocket(port);
                jTextArea1.append("Server online...\n");

                while (true) {
                    Socket s = ss.accept();
                    InputStream is = s.getInputStream();
                    OutputStream os = s.getOutputStream();
                    jTextArea1.append("Verbunden mit " + s.getInetAddress());
                    Thread t = new Thread(new ClientHandler(is, os));
                    t.start();
                    Thread.sleep(100);
                    jTextArea1.append("Thread gestartet");
                }
            } catch (Exception e) {
                showErrorDialog(e, "Fehler in Server - run()");
            }
        }
    }

    public class ClientHandler implements Runnable {

        InputStream is;
        OutputStream os = null;
        ObjectInputStream ois = null;

        public ClientHandler(InputStream is, OutputStream os) {
            this.is = is;
            this.os = os;
        }

        @Override
        public void run() {
            try {
                String input = "";
                Object cache = null;
                ois = new ObjectInputStream(is);
                
                while((cache = ois.readObject()) != null) {
                    if(cache.toString().equals("login")) {
                        System.out.println("jnlkgjbnrg");
                    }
                }
                
                jTextArea1.append("dgkfjdbgesr");
            } catch (Exception e) {
                showErrorDialog(e, "Fehler in Server - run()");
            }
        }
    }
}
```

Das Programm läuft nur bis 
	
	
	
	





```
OutputStream os = null;
        ObjectInputStream ois = null;
```
, ab da geht es nicht mehr weiter und ich kann nichts empfangen.

Danke im Voraus


----------



## SlaterB (22. Jun 2011)

wieder das hier?
http://www.java-forum.org/netzwerkprogrammierung/119480-objectoutputstream-kehrt-zurueck.html


----------



## thewulf00 (22. Jun 2011)

Bist Du sicher, dass er dort hängt? Vielleicht hängt er auch IN der nächsten Zeile: 
	
	
	
	





```
jTextArea1.append("Verbunden mit " + s.getInetAddress());
```
, denn s.getInetAddress() könnte hängen. Das gilt es zuerst herauszufinden. DNS-Abfragen könnten darin involviert sein und das ganze verlangsamen.


----------



## homer65 (22. Jun 2011)

[Java]
ois = new ObjectInputStream(is);
[/Java]
versucht bereits vom InputStream zu lesen. Und wenn da nichts kommt, steht die Anwendung.


----------



## Javhvddfg (22. Jun 2011)

@homer65

danke dir, das nenne ich eine kurze und verständliche erklärung => Problem behoben


----------



## SlaterB (22. Jun 2011)

pff, habe ich nach 5 Min. schon gepostet,

alles Lob gehört allein mir mir


----------



## thewulf00 (22. Jun 2011)

Und noch dazu hat sich Slater auf alte Infos bezogen, d.h. das Rad nicht neu erfunden. DAS ist die richtige Vorgehensweise.


----------



## homer65 (23. Jun 2011)

Brummel, will doch auch gelobt werden. 
Ihr gönnt einem ja auch nichts. *Schmoll'*


----------

