java - My multi threaded server is not working -
hi trying make multi threaded server client app server resends upper cased version of string sent client, here 3 classes:
the server class:
package q2; import java.net.*; import java.io.*; public class server { public static void main(string[] args) throws ioexception { serversocket serversocket = null; try { serversocket = new serversocket(10118); } catch (ioexception e) { system.err.println("on ne peut pas écouter au port: 10118."); system.exit(1); } //socket clientsocket = null; system.out.println ("le serveur est en marche, attente de la connexion....."); try { multith mt = new multith(serversocket.accept()); thread t = new thread(mt); t.start(); //clientsocket = serversocket.accept(); } catch (ioexception e) { system.err.println("accept échoué."); system.exit(1); } system.out.println ("connexion réussie"); system.out.println ("attente de l'entrée....."); } }
the client class:
package q2; import java.io.*; import java.net.*; public class client { public static void main(string[] args) throws ioexception { string serverhostname = new string ("127.0.0.1"); if (args.length > 0) serverhostname = args[0]; system.out.println ("essai de se connecter à l'hôte " + serverhostname + " au port 10118."); socket echosocket = null; printwriter out = null; bufferedreader in = null; try { echosocket = new socket(serverhostname, 10118); out = new printwriter(echosocket.getoutputstream(), true); in = new bufferedreader(new inputstreamreader(echosocket.getinputstream())); } catch (unknownhostexception e) { system.err.println("hôte inconnu: " + serverhostname); system.exit(1); } catch (ioexception e) { e.printstacktrace(); //system.err.println("ne pas se connecter au serveur: " + serverhostname); system.exit(1); } bufferedreader stdin = new bufferedreader(new inputstreamreader(system.in)); string userinput; system.out.print ("entrée: "); while ((userinput = stdin.readline()) != null) { out.println(userinput); system.out.println("echo: " + in.readline()); system.out.print ("entrée: "); } out.close(); in.close(); stdin.close(); echosocket.close(); } }
and intermediate class implements runnable interface:
package q2; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.io.printwriter; import java.net.*; public class multith implements runnable { private socket soc; public multith(socket s){ this.soc = s; } public void run() { printwriter out = null; bufferedreader in = null; try{ out = new printwriter(soc.getoutputstream(), true); in = new bufferedreader(new inputstreamreader( soc.getinputstream())); string inputline; while ((inputline = in.readline()) != null) { system.out.println ("serveur: " + inputline); inputline = inputline.touppercase(); out.println(inputline); if (inputline.equals("bye.")) break; } out.close(); in.close(); //soc.close(); } catch (ioexception e1) { // todo auto-generated catch block e1.printstacktrace(); } } }
now can open many client server accepts , resends string of first one.
issue program accept 1 connection , dies. need wait on serversocket.accept() method , client make connection accept return socket. can pass socket different thread complete read/write operation. main thread can go block on accept().
try { while(true) //replace exit condition....exit condition server not client. { socket s = serversocket.accept(); multith mt = new multith(s); thread t = new thread(mt); t.start(); //clientsocket = serversocket.accept(); } } catch (ioexception e) { system.err.println("accept échoué."); system.exit(1); }
Comments
Post a Comment