私はcient/server Javaアプリに取り組んでいます。ファイル送信用とファイル受信用の 2 つのクラスを作成しました。唯一の問題は、半分のバイトしか送信されないことがあり (理由がわからない)、残りの半分が到着するのを待ってクライアントがブロックされることです。テストのために、自分のマシンでクライアントとサーバーの両方を実行しています。すべてのバイトが損失なく送信されるようにするにはどうすればよいですか?
ファイル送信者:
OutputStream out = mSocket.getOutputStream();
FileInputStream fileIn = new FileInputStream(mFile);
long startTime = System.currentTimeMillis();
/* Send bytes. */
byte[] buffer = new byte[BUFFER_SIZE];
int read;
int readTotal = 0;
while ((read = fileIn.read(buffer)) != -1) {
out.write(buffer, 0, read);
readTotal += read;
}
out.flush();
long endTime = System.currentTimeMillis();
System.out.println("\t" + readTotal + " bytes written in " + (endTime - startTime) + " ms.");
ファイラーレシーバー:
InputStream in = mSocket.getInputStream();
long startTime = System.currentTimeMillis();
/* Read bytes. */
byte[] buffer = new byte[BUFFER_SIZE];
int read;
int totalRead = 0;
FileOutputStream fileOut = new FileOutputStream(mLocalFolder + "/" + mFileName);
while (totalRead < mSize) {
read = in.read(buffer);
fileOut.write(buffer);
totalRead += read;
System.out.println("SO FAR " + totalRead + " OUT OF " + mSize);
}
fileOut.close();
long endTime = System.currentTimeMillis();
System.out.println("\tComplete. " + totalRead + " bytes read in " + (endTime - startTime) + "ms.");