ファイル転送が正常に動作しない
サーバ側からクライアント側へファイル転送をJavaで行おうとしています。
そこで以下のようなプログラムを作成し、実行するのですが
実行自体はうまくいき、1つめのファイルはきちんと転送できるのですが、
2つめのファイルが転送完了後に確認すると0バイトとなっており、
きちんと動作しません。どうするべきでしょうか。
サーバ側
※上でソケットはつないであります。
if(command.equals("put.") == true){
System.out.println("putモードに入りました");
// カーネル(linux.uml)の送信
String filename1 = args[1];
byte[] data1 = new byte[1024];
//ストリームの作成
FileInputStream fin1= new FileInputStream(filename1);
BufferedOutputStream out2 = new BufferedOutputStream(sock.getOutputStream());
System.out.println("送信ファイル : " + filename1);
//int totalSize1 = 0;
int len1;
while((len1 = fin1.read(data1)) != -1){
out2.write(data1);
}
out.flush();
fin1.close();
System.out.println(filename1 + "を送信完了しました");
// ルートファイルシステム(uml-root-hardy)の送信
String filename2 = args[2];
byte[] data2 = new byte[1024];
//ストリームの作成
FileInputStream fin2 = new FileInputStream(filename2);
//ファイルの内容を読み出し、送信する
System.out.println("送信ファイル" + filename2);
//long totalSize2 = 0;
long len2 = 0;
while((len2 = fin2.read(data2)) != -1){
out2.write(data2);
}
out.flush();
fin2.close();
System.out.println(filename2 + "を送信完了しました");
}
クライアント側
※上でソケットはつないであります。
if(change.equals("put.") == true){
System.out.println("putモードに入りました");
// 2つのファイルを転送する
// カーネル(linux.uml)の転送
String filename1 = args[2];
System.out.println("受信するファイル : " + filename1);
// FileOutputStreamの作成
FileOutputStream fout1 = new FileOutputStream(filename1);
BufferedInputStream in2 = new BufferedInputStream(sock.getInputStream());
int recvMsgSize1;
int bufSize = 1024;
byte[] byteBuffer1 = new byte[bufSize];
//int totalByte1 = 0;
while((recvMsgSize1 = in2.read(byteBuffer1)) != -1){
fout1.write(byteBuffer1);
}
System.out.println(filename1 + "を受信完了しました");
fout1.close();
// ルートファイルシステム(uml-root-hardy)の転送
String filename2 = args[3];
System.out.println("受信するファイル : " + filename2);
FileOutputStream fout2 = new FileOutputStream(filename2);
long recvMsgSize2;
//byte[] byteBuffer = new byte[bufSize];
byte[] byteBuffer2 = new byte[bufSize];
//long totalByte2 = 0;
while((recvMsgSize2 = in2.read(byteBuffer2)) != -1){
fout2.write(byteBuffer2);
}
System.out.println(filename2 + "を受信完了しました");
fout2.close();
}
またプログラム中では、サーバ、クライアントでそれぞれ
len1,len2(サーバ側)、recvMsgSize1,recvMsgSize2(クライアント側)
に警告で「ローカル変数len1(recvMsgSize1)は読み取られません」
と出ています。
どのように解決するべきでしょうか。