1. 程式人生 > 其它 >實現客戶端向伺服器端傳送檔案,伺服器向客戶端返回 “接收成功資訊“ 在客戶端列印輸出。

實現客戶端向伺服器端傳送檔案,伺服器向客戶端返回 “接收成功資訊“ 在客戶端列印輸出。

技術標籤:IO流網路javaIO流Filesocket

1.實現客戶端向伺服器端傳送檔案,伺服器向客戶端返回 “接收成功資訊” 在客戶端列印輸出。

客戶端

 public static void main(String[] args) throws IOException {
        //傳送檔案
        //客戶端建立一個要傳送的新檔案
        File file = new File("E:\\demo.txt");
        Socket s = new Socket("127.0.0.1", 9999);
        //客戶端向伺服器傳送
OutputStream os = s.getOutputStream(); FileInputStream fis = new FileInputStream(file); byte[] b = new byte[1024]; int length = 0; while ((length = fis.read(b)) != -1) { os.write(b, 0, length); } //當伺服器用while迴圈的方法讀客戶端發去訊息時如果不做處理會產生問題 // 因為伺服器不知道客戶端何時才會傳送完資訊,所以伺服器在一直等待接收訊息,不會跳出while迴圈,自然也就執行不了後面的程式碼,不能給客戶端傳送“接受成功這條訊息”
//而與此同時伺服器端想要收到客戶端發過來的“接受成功”,這樣才可以終止本次執行。 //就產生了客戶端與伺服器互等的情況即產生死鎖。 //解決方法:當客戶端發完訊息後在while迴圈後加shutdownOutput()方法。 s.shutdownOutput();//客戶端告訴伺服器已經發送完畢 //在客戶端列印輸出“接受成功”方法1 DataInputStream dis = new DataInputStream(s.getInputStream()); System.out.println( dis.
readUTF()); //在客戶端列印輸出“接受成功”方法2 /*InputStream is = s.getInputStream(); byte[] b1 = new byte[1024]; int length1 = is.read(b1); String str = new String(b1, 0, length1, "utf-8"); System.out.println(str);*/

伺服器端

 public static void main(String[] args) throws IOException {
        //接受檔案
        ServerSocket ss = new ServerSocket(9999);
        Socket s = ss.accept();
        //伺服器接收訊息,方法1
        InputStream is = s.getInputStream();
        FileOutputStream fos = new FileOutputStream("E:\\demo1");
        byte[] b = new byte[1024];
        int length = 0;
        while((length = is.read(b))!=-1){
            fos.write(b,0,length);
        }
         /*
         //伺服器接收訊息,方法2
        FileWriter fw = new FileWriter("E:\\demo1.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        byte[] b = new byte[1024];
        int length = is.read(b);
        String s1 = new String(b, 0, length);
        bw.write(s1);
        bw.close();
        */


        //給客戶端傳送“接受成功”,方法1
        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
        dos.writeUTF("伺服器收到訊息");
        //給客戶端傳送“接受成功”,方法2
      /*  OutputStream os = s.getOutputStream();
        String string = "接受成功";
        os.write(string.getBytes("utf-8"));
       */
    }

執行結果:
在這裡插入圖片描述
注意:

  1. 在執行時需要先啟動伺服器端。
  2. 客戶端想要傳送檔案給伺服器,那麼首先要求客戶端要發的檔案必須是存在的。
  3. 要讀清楚題目意思,伺服器端接受成功後需要向客戶器端返回接受成功。