File transfer hanging - Jar files in linux only!
Hey,
Not sure whether to post this in the advanced or beginner, I've been Java coding for years but been a while since I did Client-Server and this seems like it could be a simplish issue, although it's driving me insane!
Basically I have a client server file transfer program.
Everything works fine in Windows, files transfer as they should.
When I go to use linux, it seems to work with most files, but when I go to transfer the files it's made for (Jar files for a plugin framework) it hangs, the client writes the file and the server doesn't finish reading and then the client keeps waiting for a server response.
Code below
Code:
Client.java
Socket sock = new Socket("localhost",13267);
System.out.println("Connecting...");
int fileLength = (int) file.length();
BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
System.out.println("Sending Filename: "+file.getName());
out.write(file.getName());
out.newLine();
out.flush();
System.out.println("Sending Filelength: "+fileLength);
// have to convert to a string or the bufferedwriter will try write
// fileLength as a character
out.write(Integer.toString(fileLength));
out.newLine();
out.flush();
byte [] byteArray = new byte [fileLength];
FileInputStream fileInput = new FileInputStream(file);
BufferedInputStream bufferedFileInput = new BufferedInputStream(fileInput);
bufferedFileInput.read(byteArray,0,byteArray.length);
OutputStream output = sock.getOutputStream();
System.out.println("Sending File...");
output.write(byteArray,0,byteArray.length);
output.flush();
System.out.println("Sending...");
System.out.println("Server: "+in.readLine());
Code:
Server.java
ServerSocket servsock = new ServerSocket(13267);
while (true) {
System.out.println("Waiting...");
Socket sock = servsock.accept();
System.out.println("Accepted connection : " + sock);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
InputStream input = sock.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
String fileName = in.readLine();
System.out.println("Received fileName :"+fileName);
String fileSize = in.readLine();
System.out.println("Received fileSize :"+fileSize);
File outputFile = new File("temp/"+fileName);
FileOutputStream output = new FileOutputStream(outputFile);
byte[] byteArray = new byte[Integer.parseInt(fileSize)];
System.out.println("Receiving File...");
input.read(byteArray);
System.out.println("Received File...");
output.write(byteArray, 0, byteArray.length);
out.write("done");
out.newLine();
out.flush();
sock.close();
}
Code looks fine but it hands in linux when trying to transfer my Jars...
And I know sending the file in one chunk isn't great but I couldn't get it to work in pieces, it was hanging in both windows and linux then.