java - Sends files from client to server -
in below codes,i trying let server-side select file client , sends it, work done on server side. program works running server first wait client run, make connection, server sends place of file client-side  outreader.write("b://ghassar/ghassar.txt"); client reads location , sends file. have run  debug , once server  reads code        string filename = inreader.readline(); stops , gets in loop, can me solve problem 
/ server.java  /*  * server waits connection established client  *  */  import java.io.*; import java.net.*;  class server {     public static void main(string args[])throws exception     {         system.out.println("server running...");          /* listen on port 5555 */          serversocket server = new serversocket(222);          /* accept sk */          socket sk = server.accept();          system.out.println("server accepted client");         // recive client         inputstream input = sk.getinputstream();         //read coming         bufferedreader inreader = new bufferedreader(new inputstreamreader(sk.getinputstream()));         //write client         bufferedwriter outreader = new bufferedwriter(new outputstreamwriter(sk.getoutputstream()));             outreader.write("b://ghassar/ghassar.txt");             outreader.flush();         /* read filename */         string filename = inreader.readline();          if (filename.equals("ghassar.txt") ){              /* reply client ready status */              outreader.write("ready\n");             outreader.flush();         }          /* create new file in libya directory using filename */         fileoutputstream wr = new fileoutputstream(new file("b://libya/ "+ filename));          byte[] buffer = new byte[sk.getreceivebuffersize()];          int bytesreceived = 0;          while((bytesreceived = input.read(buffer))>0)         {             /* write file */            wr.write(buffer,0,bytesreceived);         }     } }   import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*;  public class client  {     public static void main(string args[]){            client clientform = new client();         clientform.action();      }     public void action() {           try{              /* try connect server on localhost, port 5555 */              socket sk = new socket("localhost", 222);             outputstream output = sk.getoutputstream();              /* steam send staff*/              outputstreamwriter outputstream = new outputstreamwriter(sk.getoutputstream());              /* steam recive staff */              bufferedreader inreader = new bufferedreader(new inputstreamreader(sk.getinputstream()));                 string serverstatus = inreader.readline(); // read first line                string filename =  serverstatus;//filedlg.getselectedfile().getabsolutepath();                outputstream.write("ghassar.txt");                outputstream.flush();              /* if server ready, send file */              if ( serverstatus.equals("ready") ){                  fileinputstream file = new fileinputstream(filename);                  byte[] buffer = new byte[sk.getsendbuffersize()];                  int bytesread = 0;                  while((bytesread = file.read(buffer))>0)                 {                     output.write(buffer,0,bytesread);                 }                  output.close();                 file.close();                 sk.close();                system.out.println("file sent");              }         }         catch (exception ex){             /* catch errors */                  system.out.println("not file sent");          }     } }      
i suggest use printwriter instead of bufferedwriter. there no need call flush after each line , use println() method along auto-flush feature add new line well.
unlike printstream class, if automatic flushing enabled done when 1 of
println,printf, orformatmethods invoked, rather whenever newline character happens output.these methods use platform's own notion of line separator rather newline character.
there no need append \n in message itself.
sample code:
// here true means auto flush when `println()` method called printwriter w=new printwriter(new outputstreamwriter(sk.getoutputstream()),true); w.println(message);   possible cause in code:
the problem may @ below lines \n not added in end of string in write() method before flushing , @ client side method readline() used read it.
bufferedwriter outreader = new bufferedwriter(new outputstreamwriter(sk.getoutputstream())); outreader.write("b://ghassar/ghassar.txt");  outreader.flush();   note: can use bufferedwriter#newline() instead of \n writes line separator. line separator string defined system property line.separator, , not single newline ('\n') character.
Comments
Post a Comment