R
rd3an
Gast
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:
Bzw. der Client
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
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:
Code:
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
Code:
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