如何通过Java套接字使用IOUtils.copy传输文件

哥谭·尚穆加拉杰

我目前正在使用Java套接字。我创建了服务器端代码和客户端代码以通过套接字传输文件。我已经成功地在同一系统中将文件从客户端传输到服务器,但是如果在不同平台上尝试了不同系统,则无法正常工作。服务器端和客户端代码如下。

服务器端代码

public class FileTransferTestServer extends Thread{

    private final Socket socket;

    public FileTransferTestServer(Socket socket) {
        // TODO Auto-generated constructor stub
        this.socket = socket;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            ServerSocket serverSocket = new ServerSocket(5000);
            Socket socket = serverSocket.accept();
            System.out.println("Connection Established with "+socket.getInetAddress().getHostAddress());
            new FileTransferTestServer(socket).start();
            serverSocket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void run(){
        try {
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String buffer = null;
            String fileName = null;

            if((buffer = br.readLine()) != null){
                fileName = buffer;
            }

            FileOutputStream fos = new FileOutputStream(fileName);
            int res = IOUtils.copy(is, fos);
            System.out.println("res : "+res);
            is.close();
            fos.flush();fos.close();
            br.close();


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

客户端代码

public class FileTransferClient {

    public FileTransferClient() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            Socket socket = new Socket("172.16.4.23",5000);
            File file = new File("/Users/Guest/Desktop/DQM.txt");
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter out = new PrintWriter(outputStream);
            out.println("file-transfer");
            out.flush();
            out.println(""+file.getName());
            out.flush();
            FileInputStream fis = new FileInputStream(file);
            int res = IOUtils.copy(fis, outputStream);
            out.flush();
            outputStream.flush();
            outputStream.close();
            fis.close();
            System.out.println("res : "+res);
            socket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

如何使该程序在系统之间传输文件

我已经尝试过Windows(服务器)和Mac OS X(客户端)和Windows(服务器)和LinuxMint(客户端)

注意:1.我要发送文件名,后跟文件内容。2.文件内容可以是任何形式(文本文件或二进制文件)

彼得·劳瑞

除非您真的知道自己在做什么,否则不能在同一流中混合使用测试和二进制文件。在这种情况下,BufferedReader假定您从现在开始仅使用此读取器,并且它可以读取尽可能多的数据。这意味着它可以读取您打算用于该文件的数据。

我建议您仅使用DataInput / OutputStream。您可以对文本使用writeUtf / readUTF。

来写

Socket socket = new Socket("172.16.4.23",5000);
String pathname = "/Users/Guest/Desktop/DQM.txt";
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
outputStream.writeUTF(pathname);
FileInputStream fis = new FileInputStream(pathname);
int res = IOUtils.copy(fis, dos);
fis.close();
dos.close();
socket.close();

读书

DataInputStream dis = new DataInputStream(socket.getInputStream());
String fileName = dis.readUTF();
FileOutputStream fos = new FileOutputStream(fileName);
int res = IOUtils.copy(dis, fos);
fos.close();
socket.close();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过Java中的套接字编程传输zip文件?

来自分类Dev

如何通过Java中的套接字编程传输zip文件?

来自分类Dev

在Java中通过套接字传输文件的最佳方法

来自分类Dev

Python通过套接字传输文件

来自分类Dev

通过套接字传输大文件

来自分类Dev

通过多个套接字传输文件比仅使用一个套接字传输文件快吗?

来自分类Dev

Java套接字文件传输-文件无法完全传输

来自分类Dev

如何通过套接字传输Android对象?

来自分类Dev

如何使用 Java 从套接字正确流式传输数据

来自分类Dev

在Python中通过套接字传输文本文件

来自分类Dev

通过套接字传输多个文件时出错

来自分类Dev

通过套接字在C#中传输半文件?

来自分类Dev

Java中通过套接字传输文件的缓冲区大小应该是多少

来自分类Dev

通过Java中的套接字将文件从客户端传输到服务器

来自分类Dev

通过套接字的 Java 文件传输修剪最后一个字节

来自分类Dev

Java套接字文件传输-文件不完整

来自分类Dev

如何使用套接字将文件从 android java 应用程序传输到 C# windows 应用程序?

来自分类Dev

如何通过套接字发送PDF文件?

来自分类Dev

使用Java套接字传输文件时获取文件名和长度

来自分类Dev

Java TCP套接字传输大于4GB的文件

来自分类Dev

使用shutil.copy 模块通过网络传输文件的正确方法是什么?

来自分类Dev

如何在Python中完成套接字文件传输?

来自分类Dev

如何在Python中完成套接字文件传输?

来自分类Dev

如何在rsync传输期间跳过特殊/套接字文件?

来自分类Dev

在Java中通过套接字连续流式传输数据

来自分类Dev

如何衡量通过套接字的数据传输速度?

来自分类Dev

如何保证write()将通过套接字传输整个int?

来自分类Dev

如何衡量通过套接字的数据传输速度?

来自分类Dev

如何通过套接字传输std :: multimap数据

Related 相关文章

  1. 1

    如何通过Java中的套接字编程传输zip文件?

  2. 2

    如何通过Java中的套接字编程传输zip文件?

  3. 3

    在Java中通过套接字传输文件的最佳方法

  4. 4

    Python通过套接字传输文件

  5. 5

    通过套接字传输大文件

  6. 6

    通过多个套接字传输文件比仅使用一个套接字传输文件快吗?

  7. 7

    Java套接字文件传输-文件无法完全传输

  8. 8

    如何通过套接字传输Android对象?

  9. 9

    如何使用 Java 从套接字正确流式传输数据

  10. 10

    在Python中通过套接字传输文本文件

  11. 11

    通过套接字传输多个文件时出错

  12. 12

    通过套接字在C#中传输半文件?

  13. 13

    Java中通过套接字传输文件的缓冲区大小应该是多少

  14. 14

    通过Java中的套接字将文件从客户端传输到服务器

  15. 15

    通过套接字的 Java 文件传输修剪最后一个字节

  16. 16

    Java套接字文件传输-文件不完整

  17. 17

    如何使用套接字将文件从 android java 应用程序传输到 C# windows 应用程序?

  18. 18

    如何通过套接字发送PDF文件?

  19. 19

    使用Java套接字传输文件时获取文件名和长度

  20. 20

    Java TCP套接字传输大于4GB的文件

  21. 21

    使用shutil.copy 模块通过网络传输文件的正确方法是什么?

  22. 22

    如何在Python中完成套接字文件传输?

  23. 23

    如何在Python中完成套接字文件传输?

  24. 24

    如何在rsync传输期间跳过特殊/套接字文件?

  25. 25

    在Java中通过套接字连续流式传输数据

  26. 26

    如何衡量通过套接字的数据传输速度?

  27. 27

    如何保证write()将通过套接字传输整个int?

  28. 28

    如何衡量通过套接字的数据传输速度?

  29. 29

    如何通过套接字传输std :: multimap数据

热门标签

归档