JAVA学习64-基于C/S的文件上传

89 篇文章 1 订阅

文件上传

//服务端
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemo02 {
    public static void main(String[] args) throws IOException {
        //创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
        //监听客户端的连接
        Socket socket = serverSocket.accept();
        //获取输入流
        InputStream is = socket.getInputStream();
        //文件输出
        FileOutputStream fos = new FileOutputStream(new File("revice.jpg"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len=is.read())!=-1){
            fos.write(buffer,0,len);
        }
        //我接收完毕了
        OutputStream os=socket.getOutputStream();
        os.write("我接收完毕了,可以断开".getBytes());
        //关闭资源
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}
//客户端
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClientDemo02 {
    public static void main(String[] args) throws Exception {
        //1.创建一个Socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
        //创建一个输出流
        OutputStream os = socket.getOutputStream();
        //读取文件
        FileInputStream fil = new FileInputStream(new File("tupian.jpg"));
        //写出文件
        int len;
        byte[] buffer = new byte[1024];
        while ((len= fil.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        //通知服务器我已经结束了
        socket.shutdownInput();//我已经传输完了
        //确定服务器接收完毕,才能断开连接
        InputStream inputStream = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[100];
        int len2;
        while ((len2=inputStream.read())!=-1){
            baos.write(buffer2,0,len2);
        }
        //关闭资源
        baos.close();
        inputStream.close();
        fil.close();
        os.close();
        socket.close();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答。首先,让我们来了解一下这个程序的需求和基本功能。 ## 需求分析 这个程序需要实现以下基本功能: - 客户端可以连接到服务端,并进行身份验证。 - 客户端可以上和下载文件- 服务端可以管理用户和文件。 为了实现这些功能,我们需要设计以下几个模块: - 用户管理模块:负责用户的注册和登录验证。 - 文件输模块:负责上和下载文件- 文件管理模块:负责管理上文件和用户权限。 ## 技术选型 本程序基于字符界面,使用 C/S 结构。客户端使用 Java 语言,服务端使用 Java 语言。通信协议采用 TCP/IP 协议。 ## 系统架构 程序的整体架构如下: ``` +----------+ +----------+ | Client | <------> | Server | +----------+ TCP/IP +----------+ ``` ## 模块设计 ### 用户管理模块 用户管理模块需要实现以下功能: - 用户注册 - 用户登录验证 - 用户权限管理 用户信息可以保存在服务端的数据库中,也可以保存在文件中。在本程序中,为了简化程序,我们选择将用户信息保存在文件中。 用户信息文件的格式如下: ``` username password role ``` 其中,`username` 是用户名,`password` 是密码,`role` 是用户角色,可以是 `admin` 或 `user`。 用户注册时,需要输入用户名和密码,程序会检查用户名是否重复,如果不重复,则将用户信息保存到用户信息文件中。用户登录时,需要输入用户名和密码,程序会检查用户名和密码是否匹配。 ### 文件输模块 文件输模块需要实现以下功能: - 文件 - 文件下载 文件和下载需要通过 TCP/IP 协议进行输。在本程序中,我们选择将输的文件直接保存到服务端的指定目录下。 ### 文件管理模块 文件管理模块需要实现以下功能: -文件管理 - 下载文件管理 - 用户权限管理 在本程序中,我们选择将上文件都保存在服务端的指定目录下,用户下载时只需要输入文件名即可下载。服务端需要对上和下载进行权限管理,只有 `admin` 用户可以上和下载所有文件,`user` 用户只能下载自己上文件。 ## 总结 这个基于字符界面的 C/S 结构的文件输程序,涉及到用户管理、文件输和文件管理三个模块,通过 TCP/IP 协议进行通信,采用 Java 语言实现客户端和服务端,用户信息保存在文件中,上文件保存在服务端的指定目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值