java socket模拟CS架构下文件上传功能

操作:先启动服务器,在启动客户端进行服务器的访问

一,客户端代码

package socket;

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

public class client
{
    /**
     * 1,读取文件到文件输入流中inputStream
     * 2,声明一个socket,将inputStream中的数据写入到socket下的输出流,用来发送给服务器处理,记得将截止字符写入流中,防止阻塞
     * 3,等待服务器的处理
     * 4,获取socket中的输入流,读取服务器写入输入流中的信息
     * 5,资源关闭
     */
    public static void main(String[] args) throws IOException
    {
        FileInputStream inputStream = new FileInputStream("C:\\Users\\建江\\Desktop\\Stock.zip");
        Socket socket = new Socket("127.0.0.1", 8088);
        OutputStream outputStream = socket.getOutputStream();
        //将file写入到socket中的输出流,用来发送数据
        int len;
        byte[] caches = new byte[1024];
        while ((len=inputStream.read(caches))!=-1)
        {
            outputStream.write(caches,0, len);
        }
        //将流的截止字符写入流,防止阻塞
        socket.shutdownOutput();
        InputStream socketInputStream = socket.getInputStream();
        while ((len=socketInputStream.read(caches))!=-1)
        {
            System.out.println(new String(caches,0,len));
        }
        inputStream.close();
        socket.close();
    }
}

 

二,服务端代码

package socket;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class server
{
    /**
     * 1,声明一个服务器
     * 2,从accept中获取客户端发送过来的socket
     * 3,读取socket中的输出流,将其写入文件中
     * 4,将回复客户端消息写入到socket的输出流中
     * 5,资源关闭
     */
    public static void main(String[] args) throws IOException
    {
        ServerSocket sever = new ServerSocket(8088);
        while (true)
        {
            new Thread(() ->
            {
                try
                {
                    Socket socket = sever.accept();
                    InputStream inputStream = socket.getInputStream();
                    File file = new File("C:\\Users\\建江\\Desktop\\学习文档");
                    if (!file.exists())
                    {
                        file.mkdir();
                    }
                    String fileName= "stock"+System.currentTimeMillis()+new Random().nextInt(9999)+".zip";
                    FileOutputStream outputStream = new FileOutputStream(file+"\\"+fileName);
                    int len;
                    byte[] cache = new byte[1024];
                    while ((len=inputStream.read())!=-1)
                    {
                        outputStream.write(cache,0, len);
                    }
                    socket.getOutputStream().write("写入完成".getBytes());
                    outputStream.close();
                    socket.close();
                }catch (IOException e)
                {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

 

posted @ 2022-04-05 23:22  陈建江  阅读(86)  评论(0编辑  收藏  举报