基于tcp/ip协议的并发传输文件

2020-02-02  本文已影响0人  LX_代码制造坊

服务器端

服务器端开启基于tcp的网络传输通道,通过线程启动,解决多个客户端同时像服务器传输文件的并发问题。
代码例子如下:

public class TcpFileServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            while(true){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Socket accept = serverSocket.accept();
                            InputStream inputStream = accept.getInputStream();
                            File file = new File("E:\\");
                            if (!file.exists()){
                                file.mkdir();
                            }
                            FileOutputStream fileOutputStream = new FileOutputStream(file+"copy_test.txt");
                            int len = 0;
                            byte bts[] = new byte[1024];
                            while((len=inputStream.read(bts))!=-1){
                                fileOutputStream.write(bts,0,len);
                            }
                            accept.getOutputStream().write("上传成功!!!".getBytes());
                            fileOutputStream.close();
                            accept.close();
                        }catch (Exception e){
                            System.out.println(e.toString());
                        }
                    }
                }).start();

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端

客户端负责通过tcp协议于服务器连通,并且向服务器传输数据。
代码例子如下:

public class TcpFileClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1",8888);
            OutputStream outputStream = socket.getOutputStream();
            FileInputStream fileInputStream = new FileInputStream("E:\\test.txt");
            int len = 0;
            byte bs[] = new byte[1024];
            while ((len = fileInputStream.read(bs))!=-1){
                outputStream.write(bs);
            }
            socket.shutdownOutput();
            InputStream inputStream = socket.getInputStream();
            while ((len = inputStream.read(bs))!=-1){
                System.out.println(new String(bs,0,len));
            }
            fileInputStream.close();
            socket.close();


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读