java - why doesn't my client read correctly the outputStream sent by the Server? -
it's simple client-server server using bufferedwriter object send client receiving in object bufferedreader.
when use outputstream , printwriter server , inputstream , scanner client works well.
what happens client in buffered way reads -1 if i'm sending int , null string.
i hope english makes sense. ;p
that's code:
server:
import java.io.*; import java.net.*; public class server { public static void main(string[] args) throws ioexception { serversocket server = new serversocket(8189); socket incoming; incoming = server.accept(); try { // outputstream output = incoming.getoutputstream(); // printwriter outstream = new printwriter(output, true /*autoflush*/); // outstream.println("enter"); bufferedwriter output = new bufferedwriter(new outputstreamwriter(incoming.getoutputstream())); output.write(3); system.out.println("\nsent"); } { incoming.close(); } } } client:
import java.io.*; import java.net.*; import java.util.scanner; public class client { public static void main(string[] args) throws unknownhostexception, ioexception { //client theclient= new client(); socket rtspsocket; int serverport = 8189; //server name address string serverhost = "localhost"; //get server ip address inetaddress serveripaddress = inetaddress.getbyname(serverhost); rtspsocket = new socket(serveripaddress, serverport); try { /* inputstream input = theclient.rtspsocket.getinputstream(); scanner in = new scanner(input); string line = in.nextline(); system.out.println(line); */ bufferedreader input = new bufferedreader(new inputstreamreader(rtspsocket.getinputstream())); //string line = input.readline(); //system.out.println("\nricevuto: " + line); system.out.println(input.read()); } catch (exception e) { system.err.println("error: " + e); } } }
you have flush data receive them in client part.
output.write(3); output.flush(); system.out.println("\nsent"); when have outputstream (or writer) have flush data, way you're 100% sure wanted send has been sent.
most (if not all) outputstream subclasses use "mini buffer" flushed when it's full or manually call flush(). in case, it's more flagrant because you're using bufferedwriter.
another thing, when use streams/writers, should close them after you're finished, 1 of main thing close() (most of time) flushing last data remaining in "mini buffer".
resources :
Comments
Post a Comment