《Java两台电脑之间传输文件》

2022-03-19 00:00:00 java 传输文件 两台电脑

开发工具与关键技术:IDEA  Java

撰写时间:2021/8/10  

讲解一下两台电脑之间通过java代码传输视频文件(在有网络的情况下),我通过TCP协议来完成操作 ,TCP协议要明确哪一台电脑是服务端,哪一台是客户端,服务端负责发送数据,客户端负责接收数据。

一.我首先说客户端的代码怎么写代码图如下

public class ClientDome {
    public static void main(String[] args) throws
            IOException {
        //这里是客户端
        Socket s = new Socket("127.0.0.1", 10001);
        //使用字节缓冲流接收数据
        //服务器输出数据 ,客户端接收数据保存到数据库中
        BufferedInputStream bis=new BufferedInputStream(s.getInputStream());

        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("shiping.mp4"));

        byte[] bytes=new byte[8192];
        int len;
       while ((len=bis.read(bytes))!=-1){
           bos.write(bytes,0,len);
           bos.flush();
       }
       BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
       //输出 反馈给服务器
        bw.write("我已接收到视频文件");
        bw.flush();
        bos.close();
        s.close();
    }
}

首先我定义了一个Socket类传入两个参数明确服务端的IP地址和端口,然后使用字节缓冲流接收数据,然后把数据读取到当前项目中,所以路径前缀我不需要写了,使用一个字节一个字节数组的方法读取数据,读取完数据以后,要将信息反馈给服务器,表示已经读取完数据,最后关闭流释放资源。

  • 我再来说一下服务端的代码怎么写如图下所示,首先我实例化了ServerSocket类,使用有参构造方法,参数是端点,然后我用这个类的实例化对象ss去调用监听方accept返回
public class ServerDome {
    public static void main(String[] args) throws
            IOException {
        //服务器接收数据
        ServerSocket ss=new ServerSocket(10001);
        Socket s=ss.accept();
       //读取视频文件  读取 当前类文件路径下的视频文件
        BufferedInputStream bis=new BufferedInputStream
                (ServerDome.class.getClassLoader().getResourceAsStream("Cyberpunk 2077.mp4"));
        BufferedOutputStream bos=new BufferedOutputStream(s.getOutputStream());
        byte[] bytes=new byte[8192];
        int len;
        while ((len=bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
            bos.flush();
        }
        s.shutdownOutput();
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
        //输出 数据
        System.out.println("客户端:"+br.readLine());
        bis.close();
        s.close();
    }
}

一个Socket对象用s声明该返回值,然后首先我用字节缓冲输入流读取到当前这个测试类的根文件路径下的视频文件,读取的同时用字节缓冲输出输出数据给客户端,输出完毕之后一定要用 s调用 shutdownOutput()方法,关闭TCP套接字字符输出流,如果不关闭这里一直会等待数据读取然后输出,然后客户端一边也会一直在等待接收数据,然后就卡在这里了。

最后接收客户端的反馈输出到控制台中,并且关闭流和服务端,释放资源。

最后我在我自己的电脑上给自己的传输文件,在同一台电脑上执行这个操作,首先打服务端,然后再打开客户端。结果如下

《《Java两台电脑之间传输文件》》

 

如果你想尝试一下传输文件最好拉上自己的好友一起尝试。

    原文作者:deasec
    原文地址: https://blog.csdn.net/deasec/article/details/119779865
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章