[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1594
  • Last Modified:

How do I keep my connection from getting reset?

I have a Java applet that uploads and downloads files to a server. With one file in particular, I'm always getting the same exception thrown:
java.net.SocketException:Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at...
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
    at FTA.copyInputStream(FTA.java:1023)
    etc
and also
java.net.SocketException: Connection reset
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(Unknown Source)
    at...
    at FTA.DownloadZipFile(FTA.java:756)
    etc.
Caused by javax.net.ssl.SSLException: java.net.SocketException: Connection reset
    at...
    at FTA.copyInputStream(FTA.java:1023)
    at FTA.DownloadZipFile(FTA.java:754)
    ... 5 more
Caused by java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    ... 19 more
My question is: what does this mean (beyond the obvious) and how do I get my connection to not reset itself? Thanks.
// FTA.java
 
private String DownloadZipFile()
{
  File f = null;
  try 
  {
    URL u = new URL(Url);
    HttpURLConnection conn = (HttpURLConnection)u.openConnection();
 
    InputStream is = conn.getInputStream();
    f =  File.createTempFile("FTA", ".tmp");
    f.deleteOnExit();
    FileOutputStream fw = new FileOutputStream(f);
    int size = conn.getContentLength();
 
    BufferedOutputStream bos = new BufferedOutputStream( fw );
    copyInputStream(is, bos, size, true );     // line 754
 
    is.close();                                // line 756
    bos.close();
    fw.flush();	
    fw.close();
 
    return f.getAbsolutePath();
  }
  catch (SocketException sx)
  {
    System.err.println(sx.getMessage());
    sx.printStackTrace();
    return null;
  }
  finally {
    if(f != null) { f.delete(); }
  }
}
 
private void copyInputStream(InputStream in, OutputStream out, int totalLength, boolean showProgress) throws IOException
{
  try
  {
    byte[] buffer = new byte[1024];
    Date start = new Date();
 
    int bytesSent = 0;
    int len;                //line 1023 -- how is this throwing an exception???
 
    while ((len = in.read(buffer)) >= 0 && !shouldCancel)
    {
      bytesSent += len;
      out.flush();
    }
    out.flush();
  }
// We might need to try throwing these to the calling method.
  catch (SocketException sx)
  {
    System.err.println(sx.getMessage());
    sx.printStackTrace();
  }
  catch (IOException iox)
  {
    System.err.println(iox.getMessage());
    iox.printStackTrace();
  }
// there should be a finally clause right here to deal with the socket
// resetting the connection
}

Open in new window

0
tjgquicken
Asked:
tjgquicken
1 Solution
 
CEHJCommented:
I don't understand how copyInputStream is working *at all* - nothing is written to the OutputStream
0
 
objectsCommented:
You can't stop that, it is caused by the client disconnecting. eg. if they cancel the upload/download.
You should instead detect it occurring and handle it garcefully (by basically ignoring it and cancell up/download)

0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now