Java客户端-服务器发送文件流

标签 java client inputstream server

我正在尝试编写一个非常简单的客户端-服务器应用程序,其中客户端发送文本文档 .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/

相关文章:

java - 从另一个类构造函数的 main 方法调用时出现 ".class expected"错误

java - Constructor Jeans 不能应用给定的类型

wpf - 如何确保客户端保持连接到 WPV MVVM 应用程序中的 WCF 服务?

java - BufferedReader 和 InputStreamReader 是否应该显式关闭?

java - 从没有客户端的输入流读取数据 "flush()"

java - 输入流的skip方法总是返回0

c# - 在c#中获取从base64和UTF8转换后的视频文件

java - GWT Cloner 需要深度克隆内存中的对象

java - 如何在客户端和服务器之间传输多个文件?

networking - 什么时候需要端口转发?