Help needed in File transfering and socket problem

Discussion in 'Java' started by mimisam, Apr 30, 2004.

  1. mimisam

    mimisam Guest

    Hi,

    I have an application which uses java socket to transfer file within 2
    computers. Problem occurs when the network connection is lost during
    file transfering(example, cable is loose).
    In my client program, it is ok as it will show me an exception of
    'Connection reset by peer' and exit the program. However in server
    program, it simply stops at the read() line and hang forever. I just
    wonder if there is a way for the server to catch any exception, or
    detect the lost connection so that it can exit the program
    automatically.
    Please help! Thanks!!

    I have simplified my code, the file transfering parts for client and
    server are similar:

    ***client***
    try{
    Socket socket=new Socket(server,port)
    out = new BufferedOutputStream(socket.getOutputStream());
    fileIn = new BufferedInputStream(new FileInputStream(file));

    int numRead;
    byte[] buffer=new byte[1024];
    //file transfering
    while( (numRead = fileIn.read(buffer)) >=0)
    {
    out.write(buffer, 0, numRead);
    }
    }catch(Exception e){e.printStackTrace();}


    ***server***
    server = new ServerSocket(port);
    client = null;
    while (true) {
    try{
    client = server.accept();
    in = new BufferedInputStream(client.getInputStream());
    fileout = new BufferedOutputStream(new
    FileOutputStream(filedest));
    byte[] buffer = new byte[1024];
    int readMe;
    // program hang in the 'while'loop during transfering,
    // probably the in.read(buffer)
    while( (readMe = in.read(buffer)) >= 0 ){
    fileout.write(buffer, 0, readMe);
    }
    }catch(Exception e){e.printStackTrace();}

    }//end while
    mimisam, Apr 30, 2004
    #1
    1. Advertising

  2. mimisam wrote:
    > Hi,
    >
    > I have an application which uses java socket to transfer file within 2
    > computers. Problem occurs when the network connection is lost during
    > file transfering(example, cable is loose).
    > In my client program, it is ok as it will show me an exception of
    > 'Connection reset by peer' and exit the program. However in server
    > program, it simply stops at the read() line and hang forever. I just
    > wonder if there is a way for the server to catch any exception, or
    > detect the lost connection so that it can exit the program
    > automatically.
    > Please help! Thanks!!
    >
    > I have simplified my code, the file transfering parts for client and
    > server are similar:
    >
    > ***client***
    > try{
    > Socket socket=new Socket(server,port)
    > out = new BufferedOutputStream(socket.getOutputStream());
    > fileIn = new BufferedInputStream(new FileInputStream(file));
    >
    > int numRead;
    > byte[] buffer=new byte[1024];
    > //file transfering
    > while( (numRead = fileIn.read(buffer)) >=0)
    > {
    > out.write(buffer, 0, numRead);
    > }
    > }catch(Exception e){e.printStackTrace();}
    >
    >
    > ***server***
    > server = new ServerSocket(port);
    > client = null;
    > while (true) {
    > try{
    > client = server.accept();
    > in = new BufferedInputStream(client.getInputStream());
    > fileout = new BufferedOutputStream(new
    > FileOutputStream(filedest));
    > byte[] buffer = new byte[1024];
    > int readMe;
    > // program hang in the 'while'loop during transfering,
    > // probably the in.read(buffer)
    > while( (readMe = in.read(buffer)) >= 0 ){
    > fileout.write(buffer, 0, readMe);
    > }
    > }catch(Exception e){e.printStackTrace();}
    >
    > }//end while


    It will eventually time out. You can set the timeout with
    Socket.setSoTimeout() if you wish.

    --

    Knute Johnson
    email s/nospam/knute/
    Molon labe...
    Knute Johnson, Apr 30, 2004
    #2
    1. Advertising

  3. mimisam

    Roedy Green Guest

    On 30 Apr 2004 03:26:59 -0700, (mimisam) wrote or
    quoted :

    >However in server
    >program, it simply stops at the read() line and hang forever.


    You can set a timeout on the server's read so that it will give up
    after say a minute.

    --
    Canadian Mind Products, Roedy Green.
    Coaching, problem solving, economical contract programming.
    See http://mindprod.com/jgloss/jgloss.html for The Java Glossary.
    Roedy Green, Apr 30, 2004
    #3
  4. mimisam

    Roedy Green Guest

    Roedy Green, Apr 30, 2004
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    2
    Views:
    285
  2. Replies:
    1
    Views:
    268
    mlimber
    Jan 15, 2007
  3. Laszlo Nagy
    Replies:
    1
    Views:
    4,766
    Mark Wooding
    Jan 27, 2009
  4. Jean-Paul Calderone
    Replies:
    0
    Views:
    948
    Jean-Paul Calderone
    Jan 27, 2009
  5. Laszlo Nagy
    Replies:
    0
    Views:
    531
    Laszlo Nagy
    Feb 1, 2009
Loading...

Share This Page