さて私はJavaのソケットを使用してファイルを転送しようとしています
これがコードです
クライアントコード
try{
// get streams
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream din = new DataInputStream (socket.getInputStream());
dos.writeUTF(fileName);
dos.flush();
boolean isOk = din.readBoolean();
if(!isOk){
throw new StocFileNotFound("Fisierul: " + fileName +" was not found on:" + address.toString());
} else {
baos = new ByteArrayOutputStream();
byte biti [] = new byte[1024];
while(din.read(biti,0,1024) != -1){
baos.write(biti,0,biti.length);
}
}
}
catch(IOException e){}
finally {
try{ socket.close(); } catch (IOException e){}
}
次に、を返し、baos.toByteArray()
OutputStreamのwriteメソッドを使用してファイルに書き込みます。
サーバーコード
try{
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream din = new DataInputStream (socket.getInputStream());
// check if it is really a file or if it is an existing file
File file = new File(din.readUTF());
// write false
if ( !file.exists() || !file.isFile() ){
dos.writeBoolean(false);
dos.flush();
}
// write true and write the file
else {
byte biti[] = new byte[1024];
dos.writeBoolean(true);
FileInputStream fis = new FileInputStream(file);
while(fis.read(biti,0,1024) != -1){
dos.write(biti,0,biti.length);
}
dos.flush();
try{ fis.close(); } catch (IOException e){}
}
} catch (IOException e){}
finally {
try{socket.close();}catch(IOException e){}
}
問題
.txt
ファイルを転送して表示するとgedit
、テキストの後に複数のが表示されますが、ファイルを\00\00\00
使用して開くとnotepad(in wine)
、テキストのみが表示されます。.doc
加えて、画像や作品もご覧いただけます。それで、gedit
それは私のプログラムで何かありますか、それともそれですか?
編集私は「こんにちは、うまくいくことを願っています!」のようなものを送っていました。