Note that there are some explanatory texts on larger screens.

plurals
  1. POJava Client-Server problem when sending multiple files
    text
    copied!<p>I rewrote some of the code to implement the two answers below, and low and behold I got it to send 1 image, but now I just need it to keep sending, but the server finishes after 1 single image.</p> <p>Client (Revised):</p> <pre><code>public void transferImage() { File file = new File(ServerStats.clientFolder); String[] files = file.list(); int numFiles = files.length; boolean done = false; BufferedInputStream bis; BufferedOutputStream bos; int num; byte[] byteArray; long count; long len; Socket socket = null ; while (!done){ try { socket = new Socket(ServerStats.imgServerName,ServerStats.imgServerPort) ; InputStream inStream = socket.getInputStream() ; OutputStream outStream = socket.getOutputStream() ; System.out.println("Connected to : " + ServerStats.imgServerName); BufferedReader inm = new BufferedReader(new InputStreamReader(inStream)); PrintWriter out = new PrintWriter(outStream, true /* autoFlush */); for (int itor = 0; itor &lt; numFiles; itor++) { String fileName = files[itor]; System.out.println("transfer: " + fileName); File sentFile = new File(fileName); len = sentFile.length(); System.out.println(len); out.println(len); out.println(sentFile); //SENDFILE bis = new BufferedInputStream(new FileInputStream(fileName)); bos = new BufferedOutputStream(socket.getOutputStream( )); byteArray = new byte[1000000]; count = 0; while ( (num = bis.read(byteArray)) &gt;0 ){ //num = bis.read(byteArray); bos.write(byteArray,0,num); } bos.close(); bis.close(); System.out.println("file done: " + itor); } done = true; } catch (IOException ee){ System.err.println("FileIO Error: " + ee); } } </code></pre> <p>}</p> <p>Server (Revised):</p> <pre><code>public static void main(String[] args) { BufferedInputStream bis; BufferedOutputStream bos; int num; File file = new File(ServerStats.serverFolder); if (!(file.exists())){ file.mkdir(); } try { ServerSocket socket = new ServerSocket(ServerStats.imgServerPort); Socket incoming = socket.accept(); try { try{ if (!(file.exists())){ file.mkdir(); } InputStream inStream = incoming.getInputStream(); OutputStream outStream = incoming.getOutputStream(); BufferedReader inm = new BufferedReader(new InputStreamReader(inStream)); PrintWriter out = new PrintWriter(outStream, true /* autoFlush */); String length2 = inm.readLine(); System.out.println(length2); String filename = inm.readLine(); System.out.println("Filename = " + filename); out.println("ACK: Filename received = " + filename); //RECIEVE and WRITE FILE byte[] receivedData = new byte[1000000]; bis = new BufferedInputStream(incoming.getInputStream()); bos = new BufferedOutputStream(new FileOutputStream(ServerStats.serverFolder + "/" + filename)); //long length = (long)Integer.parseInt(length2); //length++; while ( (num = bis.read(receivedData)) &gt; 0){ bos.write(receivedData,0,num); } //System.out.println(counter); bos.close(); bis.close(); File receivedFile = new File(filename); long receivedLen = receivedFile.length(); out.println("ACK: Length of received file = " + receivedLen); } finally { incoming.close(); } } catch (IOException e){ e.printStackTrace(); } } catch (IOException e1){ e1.printStackTrace(); } </code></pre> <p>}</p> <p>Output:</p> <pre><code> Welcome to DrJava. Working directory is C:\Documents and Settings\Dapper Dan\Desktop &gt; run ServerQueue.Client Connected to : localhost transfer: Sunset.jpg 71189 file done: 0 transfer: Water lilies.jpg 83794 FileIO Error: java.net.SocketException: Socket is closed Connected to : localhost transfer: Sunset.jpg 71189 &gt; </code></pre> <p>That is the output on the client side, and the only image that got transfered was Sunset.jpg as indicated by file done statement.</p> <p>Any ideas on what is causing this?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload