Я пытаюсь написать очень простое клиент-серверное приложение, где клиент отправляет текстовый документ.docx-format и сервер получает просто.
Моя проблема в том, что полученный файл (mupp.docx) поврежден, согласно слову: http://www.ladda-upp.se/files/2014/b126506.jpg
Я не уверен, где я ошибаюсь. То, что Im unsure:
* Должно ли последнее чтение, когда fis.read(b) возвращает -1, записывается в файл? К выходу клиента?
* Я слишком часто сливаю?
* У меня неправильный размер байта [] b?
Ive попытался перемещаться по разрыву if (x == -1); в обеих программах без успеха. Я не знаю, что случилось:/У вас?
public class FileSender{
public static void main(String ar[])throws Exception{
Socket clientSocket=new Socket("127.0.0.1",1234);
System.out.println("connected");
OutputStream out=clientSocket.getOutputStream();
FileInputStream fis=new FileInputStream("lupp.docx");
int x=0;
byte[] b = new byte[256];
while(true){
x=fis.read(b);
if(x==-1)break;
out.write(b);
out.flush();
}
fis.close();
out.close();
}
}
public class FileReceiver{
public static void main(String ar[])throws Exception{
ServerSocket ss=new ServerSocket(1234);
Socket clientSocket=ss.accept();
InputStream in=clientSocket.getInputStream();
FileOutputStream fos=new FileOutputStream("mupp.docx");
int x=0;
byte[] b = new byte[256];
while(true){
x=in.read(b);
if(x==-1)break;
fos.write(b);
fos.flush();
}
in.close();
fos.close();
}
}
измените out.write(b) и fos.write(b) на fos.write(b, 0, x); Это устранит ошибку.