Chase Preuninger wrote: > I am writing a program that transfers files over a socket, the only > problem is that when the receiving side calls the read method it > always returns -1. A few things seems "unusual" to me: 1) The order you are closing streams and sockets in - I would close streams before socket. 2) Maybe a flush when writing would be a good idea. 3) Single byte read and write are very inefficient (even when buffered). Arne > //SENDING END > public void run() > { > Socket s = null; > InputStream in = null; > try > { > s = server.accept(); > > if(s.getInetAddress().getHostAddress().equalsIgnoreCase(validIP)) > { > in = new BufferedInputStream(new > FileInputStream(from)); > OutputStream out = new > BufferedOutputStream(s.getOutputStream()); > for(int b = in.read(); b != -1; b = in.read()) > { > out.write(b); > } > out.flush(); > } > } > catch(Exception ex) > { > ex.printStackTrace(); > } > finally > { > try > { > s.close(); > } > catch(Exception ex){} > try > { > server.close(); > } > catch(Exception ex){} > try > { > in.close(); > } > catch(Exception ex){} > } > } > //DOWNLOADING SIDE > public void run() > { > Socket s = new Socket(); > OutputStream out = null; > try > { > s.connect(addr); > ProgressMonitorInputStream in = new > ProgressMonitorInputStream(parent, "Downloading " + file, > s.getInputStream()); > in.getProgressMonitor().setMaximum(1000); > out = new BufferedOutputStream(new FileOutputStream(to)); > int b; > int read = 0; > while(!s.isClosed() && (b = in.read()) != -1) > { > out.write(b); > read++; > double frac = (double)read / (double)size; > frac *= 1000; > in.getProgressMonitor().setProgress((int)frac); > } > } > catch(Exception ex) > { > ex.printStackTrace(); > } > finally > { > if(s != null && s.isConnected()) > { > try > { > s.close(); > } > catch(Exception ex){} > } > if(out != null) > { > try > { > out.close(); > } > catch(Exception ex){} > } > } > }