026.5 網絡編程 上傳圖片

#######################################
客戶端java

###UploadPicClient.java
public class UploadPicClient {
    /**
     * @param args
     * @throws IOException 
     * @throws  
     */
    public static void main(String[] args) throws IOException {
        System.out.println("上傳圖片客戶端運行......");
        //1,建立socket。
        Socket s = new Socket("192.168.1.223", 10007);
        
        //2,讀取源圖片。
        File picFile = new File("tempfile\\1.jpg");
        FileInputStream fis = new FileInputStream(picFile);
        
        //3,目的是socket 輸出流。
        OutputStream out = s.getOutputStream();
        
        byte[] buf = new byte[1024];
        
        int len = 0;
        while((len=fis.read(buf))!=-1){
            out.write(buf,0,len);
        }
        
        //告訴服務器端圖片數據發送完畢,不要等着讀了。
        s.shutdownOutput();
        
        //讀取上傳成功字樣。
        InputStream in = s.getInputStream();
        byte[] bufIn = new byte[1024];
        int lenIn = in.read(bufIn);
        System.out.println(new String(bufIn,0,lenIn));
        
        //關閉。
        fis.close();
        s.close();
    }
}

 

##################################################################
服務端服務器

###UploadPicServer.java
public class UploadPicServer {
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        System.out.println("上傳圖片服務端運行......");
        // 建立server  socket 。
        ServerSocket ss = new ServerSocket(10007);

        while (true) {
            // 獲取客戶端。
            Socket s = ss.accept();
            
            //實現多個客戶端併發上傳,服務器端必須啓動作個線程來完成。
            new Thread(new UploadPic(s)).start();
        }
    }
}

 

###UploadPic.java
public class UploadPic implements Runnable {
    private Socket s;
    public UploadPic(Socket s) {
        this.s = s;
    }
    @Override
    public void run() {
        try {
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip + ".....connected");

            // 讀取圖片數據。
            InputStream in = s.getInputStream();

            // 寫圖片數據到文件。
            File dir = new File("e:\\uploadpic");
            if (!dir.exists()) {
                dir.mkdir();
            }
            // 爲了不覆蓋,經過給重名的文件進行編號。
            int count = 1;
            File picFile = new File(dir, ip + "(" + count + ").jpg");
            while (picFile.exists()) {
                count++;
                picFile = new File(dir, ip + "(" + count + ").jpg");
            }
            FileOutputStream fos = new FileOutputStream(picFile);

            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = in.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }

            // 給客戶端一個回饋信息。
            OutputStream out = s.getOutputStream();
            out.write("上傳成功".getBytes());

            // 關閉資源。
            fos.close();
            s.close();
        } catch (IOException e) {
        }
    }
}
相關文章
相關標籤/搜索