MultiThreading, Java Server/Client Project -


hi i'm working on server/ client program in java, client connects server , sends number server, server adds number global variable , returns global variable. problem having when have multiple clients 1 client doesn't work while other does, client created @ later stage works. have created separate threads each client , , works degree.

this snippet of server class creates new thread

public static integer globalsum = 0;  public static void main(string[] args) throws ioexception {      serversocket server = new serversocket(8888);     socket s;      system.out.println("server running. waiting client connect...");      while(true) {          s = server.accept();         threadhandler th=new threadhandler(s);         thread t=new thread(th);         t.start();         system.out.println("client connected");      } } 

here client class

public class client2 {      public static void main(string[] args) throws ioexception {         socket s = new socket("localhost", 8888);         inputstream instream = s.getinputstream();         outputstream outstream = s.getoutputstream();         scanner in = new scanner(instream);         scanner input= new scanner(system.in);         printwriter out = new printwriter(outstream);          for(int i=0;i<5;i++){             system.out.println("please enter value "+(i+1));             string response=input.nextline();             string request="submit"+" "+response+"\n";             out.print(request);             out.flush();             system.out.println(in.nextline());         }          out.print("quit\n");         out.flush();          s.close();     }  } 

and here threadhandler class

import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.io.printwriter; import java.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.scanner;  public class threadhandler implements runnable {      private socket s;     private scanner in;     private static printwriter out;     servermultipleclients serverinstance;      public threadhandler(socket s)     {         //this.serverinstance=serverinstance;         this.s=s;      }      public void run() {         try {             try {                  in = new scanner(s.getinputstream());                 out = new printwriter(s.getoutputstream());                  doservice(); // actual service              } {                 s.close();             }          } catch (ioexception e) {             system.err.println(e);         }         return;     }       public void doservice() throws ioexception{          string request;          while(true){              request=in.next();             string arraystring[] = request.split("\\s+") ;             if(request.equals("submit")){                 string value2=in.next();                 handle(value2);             }             else if (request.equals("quit")){                 break;             }             else if(!request.equals("submit")||!request.equals("quit")){                 system.out.println("error in input");                 break;             }          }      }       public void handle(string value1){          if(isint(value1)==true){              int valueint=integer.parseint(value1);              synchronized(serverinstance.globalsum) {                  if((valueint+serverinstance.globalsum)<integer.max_value){                     servermultipleclients.globalsum=servermultipleclients.globalsum+valueint;                     out.println("ok");                     out.flush();                     system.out.println("new value global sum is: "+servermultipleclients.globalsum);                 }                 else if((valueint+servermultipleclients.globalsum)>=integer.max_value){                     out.println("error");                     system.out.println("global sum unchanged, value is: "+servermultipleclients.globalsum);                 }                 else{                     out.println("error");                     system.out.println("global sum unchanged, value is: "+servermultipleclients.globalsum);                 }              }         }     }      public boolean isint( string input ) {         try {             integer.parseint( input );             return true;         }         catch( exception e ) {             return false;         }     }  } 

the problem when run this, works each client run @ later stage previous client, going previous client means that client crashes.

are sure thing:

private static printwriter out; 

must static? means threads share output stream!


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -