サーバーからクライアントへのファイル転送に問題があります。転送が完了すると、ファイルが作成されますが、空です。クライアントからサーバーに送信すると機能することに注意してください。long fileLength = dis.readLong() および String fileName = dis.readUTF() で EOF 例外が発生することもあります。
クライアント:
private void sendFile(String path) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
DataOutputStream dos = new DataOutputStream(bos);
File file = new File(path);
long length = file.length();
dos.writeLong(length);
String name = file.getName();
dos.writeUTF(name);
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
int theByte = 0;
while((theByte = bis.read()) != -1)
bos.write(theByte);
dos.close();
bis.close();
displayMessage(MESSAGE_SENT);
}
private void getFile() throws IOException {
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
DataInputStream dis = new DataInputStream(bis);
long fileLength = dis.readLong();
String fileName = dis.readUTF();
File file = new File(System.getProperty("user.dir") + "/" + fileName);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int theByte = 0;
while((theByte = bis.read()) != -1)
bos.write(theByte);
bos.close();
dis.close();
displayMessage(MESSAGE_DOWNLOADED);
}
サーバ:
private void sendFile(String path) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
DataOutputStream dos = new DataOutputStream(bos);
File file = new File(path);
long length = file.length();
dos.writeLong(length);
String name = file.getName();
dos.writeUTF(name);
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
int theByte = 0;
while((theByte = bis.read()) != -1)
bos.write(theByte);
dos.close();
bis.close();
displayMessage(MESSAGE_SENT);
}
private void getFile() throws IOException {
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
DataInputStream dis = new DataInputStream(bis);
long fileLength = dis.readLong();
String fileName = dis.readUTF();
File file = new File(System.getProperty("user.dir") + "/" + fileName);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
for(int j = 0; j < fileLength; j++)
bos.write(bis.read());
bos.close();
dis.close();
displayMessage(MESSAGE_DOWNLOADED);
}