java学习笔记:网络编程(下):Java TCP协议实现文件上传和文件下载

主要是学到网络编程这一块儿,啥啥知识都应该差不多了,要是看不懂我写的,我不承认是我写的不好(狗头保命),祝大家元宵节快乐!(此祝福过期请忽略


一、补充知识

TCP和UDP的区别是必须区分服务端和客户端
Socket:插座在网络编程中,叫套接字,通俗理解就是插座和插销,连接用的。

服务端:ServerSocket类

//构造方法,创建绑定到特定端口的服务器套接字。
ServerSocket(int port)
//accept() 返回值类型Socket  侦听并接收套接字的连接。
//getInetAddress() 返回值类型InetAddress 返回此服务器套接字的本地地址

ServerSocket对象负责监听某个计算机的某个端口,使用accept方法来接收客户端的请求,在收到请求之前,发生阻塞

客户端:Socket类

//构造方法
Socket(String host,int port)//创建一个套接字连接指定主机上的指定端口
Socket(InetAddress address,int port)//创建一个套接字连接指定IP地址上的指定端口
返回值方法名描述
intgetPort()返回此对象上进行连接的端口号
InetAddressgetLocalAddress()返回此对象上的IP地址(封装为InetAddress类
voidclose()关闭连接,结束通信,结束前应该关闭此对象上的所有其他流
InputStreamgetInputStream()返回输入流对象,用于读取此对象上的数据
OutputStreamgetOutputStream()返回输出流对象,用于写入此对象上的数据

二、文件上传、文件下载 案例练习

说明:D盘代表服务器,E盘代表客户端。
D盘下Load.txt文件(内容:Load)表示要下载的文件
E盘下Up.txt文件(内容:Up)代表要上传的文件

理解了以后上传和下载其实没啥区别,这里实现文件上传,文件下载留作练习(稍后写在评论区

2.1 服务器端

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class PS {//TCP协议 服务器端
    public static void main(String[] args) throws Exception{
        //创建服务器端
        ServerSocket serverSocket = new ServerSocket(666);
        //接受数据
        Socket accept = serverSocket.accept();
        //创建输入流准备读取接到的数据
        InputStream inputStream = accept.getInputStream();
        //创建输出流,准备将数据写入服务器
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\copyUp.text");
        //写入数据
        byte[] bytes = new byte[1024];
        int leng = 0;
        while ( (leng = inputStream.read(bytes))!=-1){
            fileOutputStream.write(bytes,0,leng);
        }
        //关闭流
        inputStream.close();
        fileOutputStream.close();
        serverSocket.close();//服务器一般是不关的
    }
}

2.2 客户端

import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class PC {
    public static void main(String[] args) throws Exception{
        //创建客户端套接字
        Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 666);
        //创建输入流准备读取本地文件
        FileInputStream fileInputStream = new FileInputStream("E:\\Up.txt");
        //创建socket对象的输出流准备进行上传
        OutputStream outputStream = socket.getOutputStream();
        //上传数据
        byte[] bytes = new byte[1024];
        int leng = 0;
        while( (leng = fileInputStream.read(bytes))!=-1){
            outputStream.write(bytes,0,leng);
        }
        //关流(后开的先关
        outputStream.close();
        fileInputStream.close();
        socket.close();
    }
}

啊?今天的是不是有点儿简单了(可以结合多线程实现客户端下载多个文件?,算了,反正放假
祝愿努力学习的每个人都能取得好的结果!

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
文件上传是Web开发中常见的功能之一,Java中也提供了多种方式来实现文件上传。其中,一种常用的方式是通过Apache的commons-fileupload组件来实现文件上传。 以下是实现文件上传的步骤: 1.在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2.在前端页面中添加文件上传表单: ```html <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 3.在后台Java代码中处理上传文件: ```java // 创建一个DiskFileItemFactory对象,用于解析上传的文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,如果上传的文件大于缓冲区大小,则先将文件保存到临时文件中,再进行处理 factory.setSizeThreshold(1024 * 1024); // 创建一个ServletFileUpload对象,用于解析上传的文件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制,这里设置为10MB upload.setFileSizeMax(10 * 1024 * 1024); // 解析上传的文件,得到一个FileItem的List集合 List<FileItem> items = upload.parseRequest(request); // 遍历FileItem的List集合,处理上传的文件 for (FileItem item : items) { // 判断当前FileItem是否为上传的文件 if (!item.isFormField()) { // 获取上传文件文件名 String fileName = item.getName(); // 创建一个File对象,用于保存上传的文件 File file = new File("D:/uploads/" + fileName); // 将上传的文件保存到指定的目录中 item.write(file); } } ``` 以上代码中,首先创建了一个DiskFileItemFactory对象,用于解析上传的文件。然后设置了缓冲区大小和上传文件的大小限制。接着创建一个ServletFileUpload对象,用于解析上传的文件。最后遍历FileItem的List集合,判断当前FileItem是否为上传的文件,如果是,则获取文件名,创建一个File对象,将上传的文件保存到指定的目录中。 4.文件上传完成后,可以给用户一个提示信息,例如: ```java response.getWriter().write("File uploaded successfully!"); ``` 以上就是使用Apache的commons-fileupload组件实现文件上传的步骤。需要注意的是,文件上传可能会带来安全隐患,因此在处理上传的文件时,需要进行严格的校验和过滤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值