Sunday, 15 March 2015

Java Simple EchoServer won't work -



Java Simple EchoServer won't work -

i read through lot , found many examples doing trying do. can't find issue in code @ all. may need fresh set of eyes @ code. risk of beingness flagged duplicate thread here goes. have simple java code. opens port. connects socket that. gets inputstream , outputstream. puts text output stream , inputstream tries read text. when mehtod readline executed not homecoming code. keeps running , never comes main method.

import java.net.*; import java.io.*; import java.io.objectinputstream.getfield; public class echoserver { public static void main(string[] args) { // todo auto-generated method stub string hostname = "127.0.0.1"; // inetaddress.getlocalhost() int portnumber = 5000; serversocket ss = null; socket echosocket = null; seek { ss = new serversocket(portnumber); echosocket = new socket(hostname, portnumber); // echosocket = ss.accept(); system.out.println("open"); system.out.println(echosocket.isbound()); printwriter author = new printwriter(echosocket.getoutputstream()); (int = 0; < 100; i++) { writer.print("test string"); } writer.flush(); // writer.close(); system.out.println("inputstream read"); datainputstream = new datainputstream(echosocket.getinputstream()); string fromstream = is.readline(); system.out.println(fromstream); system.out.println("bufferreader read"); bufferedreader reader = new bufferedreader(new inputstreamreader(echosocket.getinputstream())); string fromreader = reader.readline(); system.out.println(fromreader); } grab (unknownhostexception ex1) { // todo auto-generated grab block system.out.println("ex1"); ex1.printstacktrace(); } grab (ioexception ex2) { // todo: handle exception system.out.println("ex2"); ex2.printstacktrace(); } { seek { echosocket.close(); ss.close(); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } } }

edit : updated code below... issue in code while loop in server.run never ends. looked other attributes (i remember istextavailable) not find it. thought behind code convert chat client. needless struggle !

edit 2: found the issue. never closed socket author end listner kept on listening ! help !

clientsocket.close();

added 1 line , worked!

import java.net.*; import java.io.*; import java.io.objectinputstream.getfield; import java.util.*; public class echoserver { static echoserver echo; public static class client implements runnable { socket clientsocket; string hostname = "127.0.0.1"; int portnumber = 5000; static int onesleep = 0; public void run(){ system.out.println("client run " + new date()); seek { clientsocket = new socket(hostname,portnumber); printwriter author = new printwriter(clientsocket.getoutputstream()); (int = 0; < 10; i++) { writer.println("test string " + ); } writer.flush(); clientsocket.close(); } grab (unknownhostexception e) { // todo auto-generated grab block e.printstacktrace(); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } } public class server implements runnable { public void run(){ system.out.println("server run" + new date()); int portnumber = 5000; serversocket ss = null; socket serversocket = null; inputstreamreader streamreader; seek { ss = new serversocket(portnumber); serversocket = ss.accept(); system.out.println("bufferreader read " + new date()); streamreader = new inputstreamreader(serversocket.getinputstream()); bufferedreader reader = new bufferedreader(streamreader); string fromreader; system.out.println(reader.ready()); system.out.println(reader.readline()); while ((fromreader = reader.readline()) != null) { system.out.println(fromreader); } system.out.println("after while in server run"); } grab (ioexception ex_server) { // todo auto-generated grab block system.out.println("server run error " + new date()); ex_server.printstacktrace(); } { seek { serversocket.close(); ss.close(); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } system.out.println("open" + new date()); system.out.println(serversocket.isbound()); } } public void go(){ server server = new server(); thread serverthread = new thread(server); serverthread.start(); client client = new client(); thread clientthread = new thread(client); clientthread.start(); } public static void main(string[] args) { // todo auto-generated method stub echo = new echoserver(); echo.go(); } }

i had prepared version of post earlier, based on lastly comment in other answer, seems have figured out. i'll posting anyways, in case of help.

the broad reply class, have it, represents both client-side , server-side portions within same thread / process. you've seen, you're able write info outbound (or client-side) socket, server-side component never gets chance hear incoming connections.

consequently, when effort read info inbound (or server-side) socket's input stream, nil exists because nil received. readline() method blocks until info available, why programme seems hold @ point. additionally, haifzhan said, creating new socket using new socket(...) doesn't found connection, have socket nil in stream.

the serversocket#accept method need utilize in order hear connections. method create socket you, can effort read stream. haifzhan said, method blocks until connection established, why cannot function in single-threaded environment.

to within same application, you'll need separate components , run them in separate threads. seek following:

public class echoclient { public static void main(string[] args) throws interruptedexception { new thread(new echoserver()).start(); // start server thread string hostname = "localhost"; int portnumber = 5000; seek { socket outboundsocket = new socket(hostname, portnumber); system.out.println("echo client send info server..."); printwriter author = new printwriter(outboundsocket.getoutputstream()); (int = 0; < 100; i++) { writer.print("test string"); } system.out.println("data has been sent"); writer.flush(); outboundsocket.close(); } grab (unknownhostexception e) { e.printstacktrace(); } grab (ioexception e) { e.printstacktrace(); } } }

and server component, operates separate thread:

public class echoserver implements runnable { public void run(){ seek { serversocket ss = new serversocket(5000); system.out.println("waiting connection..."); socket inboundsocket = ss.accept(); system.out.println("inputstream read"); datainputstream = new datainputstream(inboundsocket.getinputstream()); bufferedreader reader = new bufferedreader(new inputstreamreader(is)); string fromstream = reader.readline(); system.out.println(fromstream); system.out.println("bufferreader read"); ss.close(); } grab (ioexception e) { e.printstacktrace(); } } }

java

No comments:

Post a Comment