私が下に投稿したコードは、ソケットを介した単一のファイル転送のために働いています。しかし、ソケット上での複数のファイル転送では機能しません。ソケット上で複数のファイル転送を試みると、コードがクラッシュします。byte []ストリームを介して複数のファイルに対してソケットInputStreamを読み取る方法は?
コードをx回送信するサーバーをループして複数のファイルを送信し、受信コードをx回実行します。複数のファイルを送信しようとすると、最初のファイルが正常に送信され、2番目のファイル名とサイズが正常に読み取られますが、その後にコード内のエラーが発生します。
私の受信クライアントでは、ここに投稿された提案に使用しようとしました:Java multiple file transfer over socketしかし成功しませんでした。
エラーはクライアント側にあります。
質問:私はこのコードが複数のファイルで動作しないのはなぜですか?どのように修正できますか?
サーバーエラーは、クライアントがファイルサイズへの入力のためのファイルの一部を受信している最初の後のループに、NumberFormatExceptionがある
try{
String file = in.readLine(); // Read filename
int fileSize = Integer.parseInt(in.readLine()); // Read Filesize
//ERROR HAPPENING ON LINE ABOVE IN LOOPS AFTER THE FIRST
byte [] buf = new byte [fileSize];
FileOutputStream fos = new FileOutputStream(file);
InputStream is = socket.getInputStream();
int count = 0;
while (fileSize > 0 && (count = is.read(buf, 0, (int)Math.min(buf.length, fileSize))) != -1){
fos.write(buf, 0, count);
fileSize -= count;
}
fos.close();
}catch(IOException e){
e.printStackTrace();
}
が供給
try{
byte[] bytes = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(file);
OutputStream os = socket.getOutputStream();
out.println(file.getName()); // Send Filename
out.println(file.length()); // Send filesize
int count;
while ((count = fis.read(bytes)) > 0) {
os.write(bytes, 0, count);
}
os.flush();
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
クライアントを送信します。
あなたが「私のコードでエラーが発生し、この後に起こる」と言うとき、我々はどの百一部である可能性のあるエラーのいずれかを推測する必要はありませんので、またここでは、そのエラーを追加してください。 –
例外トレースがありますか? – efekctive
@ M.Prokhorov私の記事の一番下に追加されました。 – tester