Alaa
Alaa

Reputation: 541

client/server to send a file get stuck somewhere

I have implemented a client/server to send files . When there is no more messages exchanged after sending the file , the code works perfectly , but if the client sends some string to the server directly after the code of receiving the file both client and server stop doing anything and the file is not sent it's something like if they both get stuck in deadlock but I'm not really sure :

Here is the code to send the file without sending anything after it , which works: Client

String filename;
BufferedReader UIn = new BufferedReader(new InputStreamReader(System.in));
Socket peer = new Socket("localhost",9999);
System.out.print("Enter the file name to download :");
filename= UIn.readLine();

///////////////////////////////

DataOutputStream OutToServer;
OutToServer = new DataOutputStream(peer.getOutputStream());
OutToServer.writeBytes(filename+"\n");

FileOutputStream fos = new FileOutputStream(new File("D:/new.txt"));
BufferedOutputStream  out = new BufferedOutputStream(fos);
InputStream in = peer.getInputStream();
buffer = new byte[1024];

while((count=in.read(buffer))>0)
{
  fos.write(buffer, 0, count);
  System.out.println(buffer);
}

fos.close();
System.out.println("done");

Server:

ServerSocket server =null; 
try {
  server = new ServerSocket(9999);
  while(true)
  {
    client= server.accept();
    //System.out.println("Connection accepted");
    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
    DataOutputStream outToclient =new DataOutputStream(client.getOutputStream());
    String request=inFromClient.readLine();
    file = new File(request);

    if (file.exists())
    {
      OutputStream out = client.getOutputStream();
      BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));

      while((count =in.read(buffer)) >0)
      {
        out.write(buffer,0,count);
        out.flush();
      }
    }

    // System.out.println(request);
    // outToclient.writeBytes("alaa\n");

  }
} catch (IOException ex) {
  Logger.getLogger(ServerWork.class.getName()).log(Level.SEVERE, null, ex);
}

But if I try to send anything after the loop between client and server it stops working . Is it because I'm using readLine() and writeBytes()?

Upvotes: 0

Views: 420

Answers (1)

bogdan.herti
bogdan.herti

Reputation: 1107

You are using both DataOutputStream and OutputStream. I think that they should work together but what I guess you should do is to flush the buffer (or close it).

After you're done writing everything you want to send, some data may still be in the buffer. Now you will have to flush the buffer, to force it to send all the data.(as it is said here).

outToclient.writeBytes("alaa\n");
outToclient.flush();

Upvotes: 1

Related Questions