国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - 淺析Java基于Socket的文件傳輸案例

淺析Java基于Socket的文件傳輸案例

2020-03-28 11:23lijiao JAVA教程

這篇文章主要針對Java基于Socket的文件傳輸案例進行詳細解析,具有一定的參考價值,感興趣的朋友可以參考一下

本文實例介紹了Java基于Socket的文件傳輸案例,分享給大家供大家參考,具體內容如下

1、Java代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.wf.demo.socket.socketfile;
 
import java.net.*;
import java.io.*;
 
/**
 * 2.socket的Util輔助類
 *
 * @author willson
 *
 */
public class ClientSocket {
 
  private String ip;
 
  private int port;
 
  private Socket socket = null;
 
  DataOutputStream out = null;
 
  DataInputStream getMessageStream = null;
 
  public ClientSocket(String ip, int port) {
    this.ip = ip;
    this.port = port;
  }
 
  /**
   * 創(chuàng)建socket連接
   *
   * @throws Exception
   *       exception
   */
  public void CreateConnection() throws Exception {
 
    try {
      socket = new Socket(ip, port);
    } catch (Exception e) {
      e.printStackTrace();
      if (socket != null)
        socket.close();
      throw e;
    } finally {
    }
  }
 
  // 發(fā)送消息
  public void sendMessage(String sendMessage) throws Exception {
    try {
      out = new DataOutputStream(socket.getOutputStream());
      if (sendMessage.equals("Windows")) {
        out.writeByte(0x1);
        out.flush();
        return;
      }
      if (sendMessage.equals("Unix")) {
        out.writeByte(0x2);
        out.flush();
        return;
      }
      if (sendMessage.equals("Linux")) {
        out.writeByte(0x3);
        out.flush();
      } else {
        out.writeUTF(sendMessage);
        out.flush();
      }
    } catch (Exception e) {
      e.printStackTrace();
      if (out != null)
        out.close();
      throw e;
    } finally {
    }
  }
 
  // 接受消息
  public DataInputStream getMessageStream() throws Exception {
    try {
      getMessageStream = new DataInputStream(new BufferedInputStream(
          socket.getInputStream()));
      return getMessageStream;
    } catch (Exception e) {
      e.printStackTrace();
      if (getMessageStream != null)
        getMessageStream.close();
      throw e;
    } finally {
    }
  }
 
  // 關閉連接
  public void shutDownConnection() {
    try {
      if (out != null)
        out.close();
      if (getMessageStream != null)
        getMessageStream.close();
      if (socket != null)
        socket.close();
    } catch (Exception e) {
    }
  }
}

2、Java代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.wf.demo.socket.socketfile;
 
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
/**
 * 1.服務器端
 *
 * @author willson
 *
 */
public class ServerTest {
   
  int port = 8821;
 
  void start() {
     
    Socket socket = null;
     
    try {
       
      ServerSocket serverSocket = new ServerSocket(port);
       
      while (true) {
        // 選擇進行傳輸的文件
        String filePath = "E:\\lib.zip";
         
        File fi = new File(filePath);
 
        System.out.println("File Name:" + fi.getName() + ";\tFile Size():" + (int) fi.length() + "bytes");
 
        // public Socket accept() throws
        // IOException偵聽并接受到此套接字的連接。此方法在進行連接之前一直阻塞。
 
         
        System.out.println("等待客戶端連接,連接端口:" + port);
        socket = serverSocket.accept();
         
        System.out.println("建立socket鏈接");
         
        DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
         
        dis.readByte();
 
        DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
         
        DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
         
        // 將文件名及長度傳給客戶端。這里要真正適用所有平臺,例如中文名的處理,還需要加工,具體可以參見Think In Java
        // 4th里有現成的代碼。
        ps.writeUTF(fi.getName());
        ps.flush();
        ps.writeLong((long) fi.length());
        ps.flush();
 
        int bufferSize = 8192;
        byte[] buf = new byte[bufferSize];
 
        while (true) {
           
          int read = 0;
          if (fis != null) {
            read = fis.read(buf);
          }
 
          if (read == -1) {
            break;
          }
          ps.write(buf, 0, read);
        }
         
        ps.flush();
        // 注意關閉socket鏈接哦,不然客戶端會等待server的數據過來,
        // 直到socket超時,導致數據不完整。
        fis.close();
        socket.close();
         
        System.out.println("文件傳輸完成\n");
      }
 
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String arg[]) {
    new ServerTest().start();
  }
}


3、客戶端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.wf.demo.socket.socketfile;
 
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
 
/**
 * 3.客戶端
 *
 * @author willson
 *
 */
public class ClientTest {
 
  private ClientSocket cs = null;
 
  private String ip = "localhost";// 設置成服務器IP
 
  private int port = 8821;
 
  private String sendMessage = "Windwos";
 
  public ClientTest() {
 
    try {
      if (createConnection()) {
        sendMessage();
        getMessage("F:\\");
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
 
  private boolean createConnection() {
     
    cs = new ClientSocket(ip, port);
    try {
      cs.CreateConnection();
      System.out.print("連接服務器成功!" + "\n");
      return true;
    } catch (Exception e) {
      System.out.print("連接服務器失敗!" + "\n");
      return false;
    }
 
  }
 
  private void sendMessage() {
     
    if (cs == null)
      return;
    try {
      cs.sendMessage(sendMessage);
    } catch (Exception e) {
      System.out.print("發(fā)送消息失敗!" + "\n");
    }
  }
 
  private void getMessage(String savePath) {
     
    if (cs == null)
      return;
    DataInputStream inputStream = null;
    try {
      inputStream = cs.getMessageStream();
    } catch (Exception e) {
      System.out.print("接收消息緩存錯誤\n");
      return;
    }
 
    try {
       
      // 本地保存路徑,文件名會自動從服務器端繼承而來。
      int bufferSize = 8192;
      byte[] buf = new byte[bufferSize];
      int passedlen = 0;
      long len = 0;
 
      savePath += inputStream.readUTF();
      DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));
      len = inputStream.readLong();
 
      System.out.println("File Size():" + len + "bytes");
      System.out.println("開始接收文件!" + "\n");
 
      while (true) {
         
        int read = 0;
        if (inputStream != null) {
          read = inputStream.read(buf);
        }
        passedlen += read;
        if (read == -1) {
          break;
        }
        // 下面進度條本為圖形界面的prograssBar做的,這里如果是打文件,可能會重復打印出一些相同的百分比
        System.out.println("文件接收了" + (passedlen * 100 / len) + "%\n");
        fileOut.write(buf, 0, read);
      }
      System.out.println("接收完成,文件存為" + savePath + "\n");
 
      fileOut.close();
    } catch (Exception e) {
      System.out.println("接收消息錯誤" + "\n");
      return;
    }
  }
 
  public static void main(String arg[]) {
    new ClientTest();
  }
}

希望本文所述對大家學習java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
480
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美日韩成人网 | 亚洲在线一区二区 | 亚洲精品在线视频 | 亚洲福利电影网 | 懂色av中文字幕一区二区三区 | 精品久久久久久久久久久 | 精品成人久久 | 成人在线一区二区三区 | 成人av片在线观看 | 久久综合九九 | 国产精品久久久久久亚洲调教 | 欧美在线一区二区 | 精品在线一区二区三区 | 久久人人爽爽爽人久久久 | 国产亚洲视频在线观看 | 一级毛片在线播放 | 久艹精品 | 亚洲国产传媒99综合 | 精品国产乱码久久久久久蜜柚 | 影音先锋中文字幕一区 | 欧美一级特黄视频 | 日本精品视频在线观看 | 欧美亚洲国产一区二区三区 | 成人中文网 | av在线资源网 | 久草中文在线 | 国产成人精品免费视频大全最热 | 国产在线视频网 | 国产精品不卡一区二区三区 | 国产高清在线看 | 九色在线| 国产精品女同一区二区免费站 | 91精品国产乱码久久久久久 | 久久伊人精品网 | 亚洲成人精品久久 | av网址在线 | 亚洲综合色自拍一区 | 午夜国产| 国内精品久久久久 | 日韩欧美中文字幕在线视频 | 久久久一区二区 |