网络编程-TCP文件传输

TCP文件传输

需求

客户端输入文件名,服务端将对应文件传输给客户端下载

服务端

首先设置端口
创建socket对象等待客户端连接
获取用户输入的文件名
确定返回的文件,将该文件转化成字节数组
将数组写出到通道传输给客户端

package Internet.TransFile;

/**
*@author fengwj
*@version 1.0
*   服务端接收客户端请求的文件名,并将对应文件发送给客户端
*/
import Internet.Utility.StreamUtils;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws Exception {
        //监听窗口
        ServerSocket serverSocket = new ServerSocket(9999);

        //等待用户连接
        System.out.println("服务端等待连接~");
        Socket socket = serverSocket.accept();

        //获取用户要下载的文件名
        InputStream inputStream = socket.getInputStream();
        byte[] b = new byte[1024];
        int len=0;
        String downLoadFileName="";
        while((len=inputStream.read(b))!=-1){
            downLoadFileName+=new String(b,0,len);
        }
        System.out.println("客户希望下载的文件名"+downLoadFileName);

        //确定返回的文件
        String resFileName="";
        if("tankedazhan".equals(downLoadFileName)){
            resFileName="src\\tankedazhan.mp4";
        }else{
            resFileName="src\\ChaoJiMaLi.mp4";
        }

        //读取文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(resFileName));

        //将文件转化为字节数组
        byte[] bytes = StreamUtils.streamToByteArray(bis);

        //将数组输出到通道,返回客户端
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        bos.write(bytes);
        socket.shutdownOutput();//结束传输

        //关闭
        bos.close();
        bis.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

客户端

接收用户输入,确定要下载的文件名
对接端口,将文件名输出到通道
接收服务端返回的文件
写入磁盘

package Internet.TransFile;

import Internet.Utility.StreamUtils;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

/**
*@author fengwj
*@version 1.0
*   向服务端发送所需要的文件名,下载服务端发送的文件
*/
public class Client {
    public static void main(String[] args) throws Exception {
        //接收文件名
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入下载的文件名");
        String dowmLoadFileName = scanner.next();

        //发送要下载的文件名
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);

        //输出到通道
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(dowmLoadFileName.getBytes());
        socket.shutdownOutput();//结束输出

        //接收服务端返回的文件
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        byte[] bytes = StreamUtils.streamToByteArray(bis);

        //将文件写入磁盘
        String filePath="e:\\"+dowmLoadFileName+".mp4";
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        bos.write(bytes);

        //关闭资源
        bos.close();
        bis.close();
        outputStream.close();
        socket.close();

        System.out.println("客户端下载完毕~");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值