# Kommunikation zwischen ServerSocket und Socket



## Morgyr (9. Feb 2008)

Guten Morgen.

Ich öffnen einen ServerSocket und warte auf eingehende Verbindung. Ein andere Datei beinhaltet den Code zum connecten. Geht die Verbindung beim Server ein, verschickt dieser "success". Der Socket ließt das ein und überprüft, dass das Gesendete auch wirklich "success" war. Daraufhin wird ein Fenster beim Socket geöffnet. Nun möchte ich aber, dass der Socket auch dem Server Daten schickt, die der Server auch benötigt. Sobald ich das zu Implementieren versuche, wird scheinbar nicht mal mehr "success" geschickt oder es wird nicht mehr eingelesen. Aber ist readLine() nicht blockierend?


```
Server:
try{						
    ServerSocket serverSocket = new ServerSocket(2500);
    while(true){ 
        Socket socket = serverSocket.accept(); 	  
        PrintWriter out = new PrintWriter(socket.getOutputStream());   	    
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	out.println("success");	  	    	    
	out.close();
        System.out.println(bufferedReader.readLine());
     }	    	                	       
}
catch(Exception e){
			
}
```


```
Socket:
try{
    Socket socket = new Socket(mainclass.tfip.getText(), 2500);
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    OutputStream out = socket.getOutputStream();
    PrintWriter printWriter = new PrintWriter(out, true);
        		
     if(bufferedReader.readLine().equals("success")){
         new openlobby(0);    
         printWriter.println("opened");   		  			
     }     		      		          		      		
}
catch(IOException e){
        		
}
```

Das "success" wird vom Server aus versendet, aber beim Socket wird "new obenlobby(0);" nicht geöffnet.  Was mache ich falsch? Ich hoffe, ihr könnt mir helfen. Danke im voraus.

Mit freundlichen Grüßen
Morgyr


----------



## SlaterB (9. Feb 2008)

hmm, bei mir klappt der Empfang beim Client, bist du sicher, dass new obenlobby(0) nicht ausgeführt wird?
der Server kann die Antwort des Clients natürlich nicht empfangen, wenn die Verbindung beendet ist

damit du über diese Fehler informiert wirst, muss natürlich in jeden catch
e.printStackTrace();


wenn du auf das close beim Server verzichtest, dann muss ein flush() dahin,
sonst wird nix gesendet (zumindest bei mir)


```
public class Server {
	public Server() {
		try {
			ServerSocket serverSocket = new ServerSocket(2500);
			while (true) {
				Socket socket = serverSocket.accept();
				PrintWriter out = new PrintWriter(socket.getOutputStream());
				BufferedReader bufferedReader = new BufferedReader(
						new InputStreamReader(socket.getInputStream()));
				out.println("success");
				out.flush();
//				<out.close();
				System.out.println(bufferedReader.readLine());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new Server();
	}
}



public class Client {
	public Client() {
		try {
			Socket socket = new Socket("localhost", 2500);
			BufferedReader bufferedReader = new BufferedReader(
					new InputStreamReader(socket.getInputStream()));
			OutputStream out = socket.getOutputStream();
			PrintWriter printWriter = new PrintWriter(out, true);

			if (bufferedReader.readLine().equals("success")) {
				System.out.println("will open");
				printWriter.println("opened");
				System.out.println("nach open");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new Client();
	}
}
```


----------



## Morgyr (9. Feb 2008)

Das Problem lag am flush(). 
Wenn ich close() benutze, tut sich gar nichts beim Socket. Aufjedenfall kommt das "opened" beim Server mit out.flush() an.
Dass der Code ohne den input beim Server funktioniert, war Unaufmerksamkeit meinerseits. new openlobby(0); (beziehungsweise als 1.Parameter 1) wird vom Server und vom Socket aus aufgerufen ( bzw. wurde, inzwischen ist mir klar geworden, dass ich Threads brauche). Das heißt, dass eigendlich 2 Fenster hätten geöffnet werden müssen. Es war allerdings nur eins und zu meinem Pech nahm ich blind mal an, dass das Fenster vom Socket kam. Der Fehler lag also schon vor der Implementierung der input Methoden am close(). Wieso auch immer.


Vielen Dank SlaterB.

Mit freundlichen Grüßen
Morgyr


----------

