我正在尝试编写一个非常简单的客户端-服务器应用程序,其中客户端发送文本文档 .docx 格式,服务器简单地接收。
我的问题是收到的文件(mupp.docx)已损坏,根据单词: http://www.ladda-upp.se/files/2014/b126506.jpg
我不确定我哪里做错了。我不确定的是:
*最后一次读取(fis.read(b) 返回 -1)是否应该写入文件?到客户端的输出流?
*我经常冲水吗?
*我的 byte[] b 大小不正确?
我尝试绕过 if(x==-1)break;在这两个计划中都没有成功。我不知道出了什么问题:/你知道吗?
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);这将解决该错误。
关于Java客户端-服务器发送文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077510/