# Echo Server + Client



## rd3an (22. Sep 2008)

Hallo, 

bin Schüler einer HTL und hab heute von einem Lehrer die Aufgabe bekommen einen Echo Server mit dazupassendem Client zu schreiben, z.B:

Client sendet "Hallo Server"
Server antwortet "Hallo Server"

weiters soll die Antwort des Server noch in einer GUI dargestellt werden, aber das ist nicht das Problem.

Mein derzeitiger Code sieht so aus:


```
import java.io.*;
import java.net.*;


public class EchoServer {
	
	private static void handleConnection( Socket client ){ 
		BufferedReader br=null;
		BufferedWriter bw=null;
		try{
		InputStreamReader is = new InputStreamReader(client.getInputStream(),"utf8");
		OutputStreamWriter ow = new OutputStreamWriter(client.getOutputStream(),"utf8");
		
		br = new BufferedReader(is);
		bw = new BufferedWriter(ow);
		
		String reply = br.readLine();
		bw.write(reply);
		bw.flush();
		}
		catch(IOException ioe){
			ioe.getMessage();
		}
		finally{
			if(br!=null) try{br.close();}catch(IOException e){}
			 if(bw!=null) try{bw.close();}catch(IOException e){}
		}
	  } 
	 
	  public static void main( String[] args ) throws IOException { 
	    ServerSocket server = new ServerSocket(1337); 
	 
	    while ( true ){ 
	      Socket client = null;
	      try{ 
	        client = server.accept(); 
	        handleConnection ( client ); 
	      } 
	      catch ( IOException e ) { 
	        e.printStackTrace(); 
	      } 
	      finally { 
	        if ( client != null ) 
	          try { client.close(); } catch ( IOException e ) { } 
	      } 
	    } 
	  } 
}
```

Bzw. der Client 


```
import java.net.*; 
import java.io.*; 
 
public class EchoClient{
	
  public static void main( String[] args ) 
  { 
    Socket server = null; 
    
    BufferedReader br=null;
    BufferedWriter bw=null;
    try 
    { 
      server = new Socket( "localhost", 1337 ); 
      InputStreamReader is = new InputStreamReader(server.getInputStream(),"utf8");
      OutputStreamWriter ow = new OutputStreamWriter(server.getOutputStream(),"utf8");
      br= new BufferedReader(is);
      bw= new BufferedWriter(ow); 
      
      bw.write("Hallo Server");
      bw.flush();
    
      String reply=br.readLine();
      System.out.println(reply);
    } 
    catch ( UnknownHostException e ) { 
      e.printStackTrace(); 
    } 
    catch ( IOException e ) { 
      e.printStackTrace(); 
    } 
    finally 
    { 
      if ( server != null )  try { server.close(); } catch ( IOException e ) { } 
	  if(br!=null) try{br.close();}catch(IOException e){}
      if(bw!=null) try{bw.close();}catch(IOException e){}
    } 
  } 
}
```

Senden funktioniert problemlos, der Server empfängts auch, dann sende ich die Antwort und genau hier ist mein Problem.

Wie man im Code vom Client sieht will ich nachdem ich gesendet hab sofort die Antwort vom Socket einlesen, ich nehme mal stark an ich muss bevor ich lesen kann warten (wäre nur logisch)

Aber wie kann ich das "warten" auf eine Antwort realisieren? (gibts sowas wie server.accept() für normale Sockets ?)

Oder hab ich einen anderen Fehler im Code den ich ganz einfach übersehen hab ? (Zur Info, der Client bleibt mir beim readLine() hängen, danach wird nichts mehr ausgeführt)

Ich hoffe es kann mir jemand helfen, Danke im Vorraus

lg rd3an


----------



## Chumax (22. Sep 2008)

```
_ois = new ObjectInputStream(new BufferedInputStream(_socket.getInputStream()));
		        
		       
		       while (_ClientOk) {
		        	
		    
		        	Object object = null;
		      
		        	try {
			            object = _ois.readObject();
                                    if (object instanceof String) {	
                                      String hallo = (String)object;
                                    }
                                } catch (EOFException e) {
		        	
		        			
		        			e.printStackTrace();
		        			
						} catch (IOException ioe) {
				        	
				        	_ois.close();
				        	_socket.close();
				        	break;
						}

}
```

So müsste das klappen


er bleibt bei readline hängen weil er dort wartet bis etwas in den stream geschrieben wird



EDIT   habt das problem gefunden!   Es liegt daran das readLine(); eine zeile erwartet. Du deine zeile aber nie schließt.   du musst einfach ein \n an dein string anfügen dann klappt das 


```
bw.write("Hallo Server \n");
```


----------



## Guest (22. Sep 2008)

> _ClientOk



was meinst damit?!


----------



## Guest (22. Sep 2008)

Vielen Dank, dank dem EDIT von dir funktionierts, dann mach ich mich mal an die GUI , schönen abend noch =)!


----------



## Chumax (22. Sep 2008)

hab ich vergeesen raus zu nehmen.   repräsentiert einfach true, das da bei mir in verschiedene threads lief habe ich damit alles anhalten können.


----------



## jtsfds315 (30. Okt 2008)

mammamia; generic augmentin; buy cheap generic vitamin c; motrin; plavix; cheap vitamin c usa; plan b; bupropion buy; prednisone cheap; purchase ginseng; purchase yasmin; strattera; buspar online; topamax; generic ultram; buy actonel online; order generic zocor; breast augmentation generic; acyclovir online; carisoprodol; buy saw palmetto; hyaluronic acid usa; cheap neurontin usa; order fluoxetine; celebrex; buy generic soma; order vytorin usa; buy prednisolone; ultracet; buy motrin; aspirin; hydrochlorothiazide; order lisinopril online; imitrex; celexa; lamisil; zithromax; buy ultram; methotrexate; buy synthroid; order acai; buy stress relief;


----------

