java socket programming problem (sending and receiving data) -
client has sendpoints() method called other class did not include. anyways, sendpoints() called , sends integers server, receives them , send clients connected server(broadcast).
the problem is, clients keep sending integers while server stuck in thread created receiving integers(i think server not reading inputstream).
i tried changing stream, tried putting integers in object , send objectoutputstream none of these seems work. need (pointstruct class holds integer values created)
import java.net.*; import java.util.*; import java.awt.*; import java.io.*; import javax.swing.*; public class server { private arraylist dataclient; private arraylist messageclient; private serversocket dataserver; private serversocket messageserver; public static void main(string[] args) { server s1 = new server(); s1.start(); } // start running server public void start() { try { dataserver = new serversocket(4999); messageserver = new serversocket(5000); socket dataconn; socket messageconn; dataclient = new arraylist(); messageclient = new arraylist(); dataconn= null; messageconn= null; system.out.println("[server]start"); //start accepting connections while (true) { try { dataconn = dataserver.accept(); system.out.println("[server]accepted dataconn"); messageconn = messageserver.accept(); system.out.println("[server]accepted messageconn"); //add clients arraylist dataclient.add(dataconn.getoutputstream()); messageclient.add(messageconn.getoutputstream()); } catch (exception ex) { ex.printstacktrace(); } //creating receiver threads thread t1 = new thread(new datareceiver(dataconn)); thread t2 = new thread(new messagereceiver(messageconn)); system.out.println("[server]thread created"); t1.start(); t2.start(); system.out.println("[server]thread started"); } } catch(exception ex) { ex.printstacktrace(); } } //receive data clients public class datareceiver implements runnable { bufferedreader br; inputstream is; int x,y; int x2,y2; int t; int red; int green; int blue; int size; int dummy; datareceiver(socket s){ try { is=s.getinputstream(); //br = new bufferedreader(isr); } catch(exception ex) { ex.printstacktrace(); } } public void run() { while(true) { try{ iterator = dataclient.iterator(); dummy=is.read(); if(dummy==9999) { system.out.println("[server]executing data thread"); x=is.read(); system.out.println("[server]read line"+x); y=is.read(); system.out.println("[server]read line"+y); //x2=isr.read(); //y2=isr.read(); t=is.read(); red=is.read(); green=is.read(); blue=is.read(); size=is.read(); dummy=0; //broadcast data while (it.hasnext()) { outputstream os = (outputstream)it.next(); os.write(9999); os.write(x); os.write(y); os.write(t); os.write(255); os.write(0); os.write(0); os.write(size); } system.out.println("[server]data broadcasted"); } } catch(exception ex) { ex.printstacktrace(); } } } } //------------------------receive message clients------------------------ public class messagereceiver implements runnable { messagereceiver(socket s) { } public void run() { } } } public class networkhandler{ printwriter writer; bufferedreader reader; printwriter pwriter; bufferedreader preader; socket sock; socket pointsock; inputstream is; jtextarea incoming; pointhandler ph; public networkhandler(pointhandler _ph) { init(); ph=_ph; setupnetworking(); thread readerthread = new thread(new incomingreader()); readerthread.start(); thread pointerthread = new thread(new receivingpoints()); pointerthread.start(); } public void init() { incoming = new jtextarea(20,20); } private void setupnetworking() { try { // setup message port system.out.println("networking establish started"); sock = new socket("127.0.0.1",5000); system.out.println("[nh]port 5000 established"); // setup point port pointsock = new socket("127.0.0.1",4999); system.out.println("[nh]port 4999 established"); //message i/o stream inputstreamreader streamreader = new inputstreamreader(sock.getinputstream()); reader = new bufferedreader(streamreader); writer = new printwriter(sock.getoutputstream()); //point i/o stream inputstreamreader pstreamreader = new inputstreamreader(pointsock.getinputstream()); system.out.println("networking establishing: stream"); preader= new bufferedreader(pstreamreader); pwriter= new printwriter(pointsock.getoutputstream()); system.out.println("networking establishing: stream"); } catch(ioexception ex) { ex.printstacktrace(); } system.out.println("networking established"); } //send message server public void writestream(string input){ try { writer.println(input); writer.flush(); } catch(exception ex) { ex.printstacktrace(); } } public jtextarea getservermessage() { return incoming; } //receiving message server public class incomingreader implements runnable { @override public void run() { string message; try { while ((message = reader.readline())!=null){ system.out.println("[nh] read server:"+message); incoming.append(message+"\n"); } } catch(exception ex) { ex.printstacktrace(); } } } //receiving points server public class receivingpoints implements runnable { int x,y; int x2,y2; int red; int green; int blue; int t; int size; int dummy; pointstruct ps; color cr; point p; synchronized public void run() { try { = pointsock.getinputstream(); p= new point(); } catch(exception ex) { ex.printstacktrace(); } while(true) { try { dummy=is.read(); if(dummy==9999) { x=is.read(); y=is.read(); //x2=preader.read(); //y2=preader.read(); t=is.read(); red=is.read(); green=is.read(); blue =is.read(); size=is.read(); //create dummy pointstruct ps = new pointstruct(); cr = new color(red,green,blue); p.x=x; p.y=y; ps.setp1(p); p.x=x2; p.y=y2; //ps.setp2(p); ps.sett((char)t); ps.sets(size); ps.setc(cr); ph.save(ps); dummy=0; } } catch(exception ex) { ex.printstacktrace(); } system.out.println("[nh]receiving done"); } }} public void sendpoints(pointstruct ps) { outputstream os; try{ os=pointsock.getoutputstream(); os.write(9999); os.write(ps.getp1().x); os.write(ps.getp1().y); //pwriter.print(ps.getp2().x); //pwriter.print(ps.getp2().y); os.write(ps.gett()); os.write(ps.getc().getred()); os.write(ps.getc().getgreen()); os.write(ps.getc().getblue()); os.write(ps.gets()); } catch(exception ex) { ex.printstacktrace(); } system.out.println("[nh]points sent server"); } }
you reading stream incorrectly, inputstream.read()
returns byte stream, cast int.
inputstream.read()
returns values 0
255
read successful, , -1
if no more reading can done (end of stream).
for example, inputstream.read() != 9999
always. receivingpoints.run()
block not fire:
while (true) { try { dummy = is.read(); if (dummy == 9999) {} } catch(exception ex) { ex.printstacktrace(); } }
you looking datainputstream
, has methods reading , writing other basic types bytes.
Comments
Post a Comment