使用Socket同一網絡內文件傳輸

Server

package com.xiaoqiang.filetransfer;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable {
    private ServerSocket server = null;
    private Socket socket = null;
    public Server() {
        try {
            server = new ServerSocket(6688);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true) {
            try {
                String filePath = "F:\\tomcat.rar";
                File file = new File(filePath);
                System.out.println("文件長度:" + file.length());
                socket = server.accept();
                System.out.println("客戶端連接成功");
                ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
                DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
                DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

                System.out.println("接收到信息"+ois.readObject().toString());

                byte[] b = new byte[1024];
                int len = 0;

                while((len = dis.read(b)) != -1){
                    dos.write(b, 0, len);
                }
                dos.flush();
                dis.close();
                socket.close();
                System.out.println(file.getName() + "傳輸成功");

            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new Server()).start();
    }
}

Cilent

package com.xiaoqiang.filetransfer;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class Cilent {

    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("localhost", 6688);
        File file = new File("F:\\1.rar");
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        oos.writeObject("這是一個來自客戶端的訪問");
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));

        byte[] b = new byte[1024];
        int len = 0,time = 1;
        int maxsize = dis.available();
        double d = maxsize / (1024.0);
        while ((len = dis.read(b)) != -1) {
            dos.write(b, 0, len);
        }
        System.out.println("傳輸完成Cilent");
        dos.close();//流不關閉,有意想不到錯誤
        dis.close();
        socket.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章