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

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java實現文件上傳服務器和客戶端

Java實現文件上傳服務器和客戶端

2021-03-19 11:56追風- Java教程

這篇文章主要為大家詳細介紹了Java實現文件上傳服務器和客戶端,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/**
 * 使用TCP協議實現上傳功能的服務器端
 * 思路:
 * 新建ServerSocket
 * 等待客戶端連接
 * 連接上后開啟子線程,把連接獲取的Socket傳給子線程
 * 循環進行
 * @author yajun
 *
 */
public class UploadServer {
  
 public static void main(String[] args) {
  UploadServer server=new UploadServer();
  UploadThread command=new UploadThread();
  server.start(command);
 }
  
 /**
  * 功能:接受連接,開啟子線程,循環
  * @param command 用于下載的子線程對象,該對象實現了Runnable接口
  */
 private void start(UploadThread command){
  //局部變量
  ServerSocket serverSocket = null;
  Socket transSocket;
  //業務邏輯
  try {
   serverSocket=new ServerSocket(55555);
   while(true){
    System.out.println("等待連接……");
    transSocket=serverSocket.accept();
    int i=0;
    i++;
    System.out.println("第"+i+"個連接");
    //用不用在下載完后關閉線程呢???
    command.setSocket(transSocket);
    Executors.newFixedThreadPool(5).execute(command);
   }
  //異常捕獲
  } catch (IOException e) {
   e.printStackTrace();
  //關閉資源
  } finally{
   try {
    serverSocket.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }//End of try
 }//End of connect
 @Test
 public void testConnect() {
  //測試任務:先運行服務器端,然后多次運行客戶端,服務器段可以不斷創建子線程,則測試成功
  //測試準備:構造一個線程,用于模擬下載線程
  UploadThread command=new UploadThread();
  start(command);
   
 }
 
 @Test
 public void testDown() throws IOException {
  byte[] buf;
  ByteArrayInputStream bis;
  String str="canglaoshi.avi\ncontent,content,content";
  buf=str.getBytes();
  bis=new ByteArrayInputStream(buf);
  UploadThread ut=new UploadThread();
  ut.down(bis);
 }
}
//完成各個傳輸任務的子線程
class UploadThread implements Runnable{
  
 Socket socket;
 public UploadThread(){}
 public UploadThread(Socket socket){
  this.socket=socket;
 }
 @Override
 public void run() {
  InputStream in;
  try {
    
   in = socket.getInputStream();
   down(in);
    
  //異常處理
  } catch (IOException e) {
   e.printStackTrace();
  } finally{
   try {
    socket.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  //測試代碼
  /*try {
   Thread.sleep(5000);
   System.out.println(Thread.currentThread().getName()+",復制完畢");
  } catch (InterruptedException e) {
   e.printStackTrace();
  }*/
 }//End of run
 public void setSocket(Socket socket){
  this.socket=socket;
 }
 //下載方法
 /**
  * 目標:把InputStream中的數據寫入到本地
  * 思路:
  * 1.獲取輸入流,最好傳入輸入流,而不是直接從Socket獲取,傳入有利用單元測試
  * 2.從輸入流中讀到文件名
  * 3.新建文件和文件輸出流
  * 4.從輸入流中讀到文件內容到文件輸出流
  * 5.
  * @throws IOException
  */
 public void down(InputStream in) throws IOException{
  //局部變量
  char ch;
  char[] nameArr=new char[256];
  byte[] buf=new byte[1024];
  String name="";
  OutputStream out = null;
  //業務邏輯
  try {
   //第一步:獲取文件名,構造文件輸出流
   int i=0;
   while((ch=(char) in.read())!='\n'){
    nameArr[i++]= ch;
   }
   //name=nameArr.toString();//這句話無法將字符數組轉換為字符串,需用下面的語句
   name=new String(nameArr);
   System.out.println("要下載的文件為:"+name);
   out=new FileOutputStream("src\\down\\"+name);
   //第二步:將輸入流中的其他內容寫入到文件
   int len;
   while((len=in.read(buf))!=-1){
    out.write(buf,0,len);
   }
   out.flush();
  //異常捕獲
  } catch (IOException e) {
   e.printStackTrace();
  //關閉資源
  }finally{
   //疑問:兩個捕獲可不可以放到一塊呢,怎樣處理關閉流時的異常最好呢?
   in.close();
   out.close();
  }
  //調試
  System.out.println(name);
 }
  
}//End of UploadThread

文件上傳客戶端:

?
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
/**
 * 使用TCP協議實現上傳功能的客戶端
 * @author yajun
 */
public class UploadClient {
  
 public static void main(String[] args) {
  UploadClient client=new UploadClient();
  client.upload("src\\thursday\\AsListTest.java");
 }
 
 /**
  * 作用:上傳文件到服務器
  * 1.建立到服務器的連接
  * 2.獲取輸出流
  * 3.將文件內容寫入到輸出流
  * 4.獲取服務器的響應
  */
 private void upload(String name){
  Socket socket=null;
  OutputStream out;
  try {
   socket=new Socket("127.0.0.1", 55555);
   out=socket.getOutputStream();
   write2OutputStream(name, out);
  //異常捕獲
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 @Test
 public void testUpload() {
  upload("src\\status.xml");
 }
 /**
  * 作用:傳入文件名和輸出流,將文件寫入到輸出流
  * @param path
  * @throws IOException
  */
 private void write2OutputStream(String path,OutputStream out) throws IOException{
   
  FileInputStream fis = null;
  byte[] buf=new byte[1024];
  String fileName="";
  //業務邏輯
  try {
    
   //1.寫入文件名
   fileName=path.substring(path.lastIndexOf('\\')+1);
   System.out.println("您要上傳的文件名為:"+fileName);
   out.write(fileName.getBytes());
   out.write('\n');
   //2.寫入文件內容
   fis=new FileInputStream(path);
   int len;
   while((len=fis.read(buf))!=-1){
    out.write(buf, 0, len);
   }
   out.flush();
  //異常處理
  } catch (IOException e) {
   e.printStackTrace();
  //關閉資源
  } finally{
   fis.close();
   out.close();
  }
 }//End of upload
 @Test
 public void testWrite2OutputStream() throws IOException {
  ByteArrayOutputStream out = null;
  try {
   out=new ByteArrayOutputStream();
   write2OutputStream("src\\status.xml", out);
   System.out.println(out.toString("utf-8"));
  } catch (IOException e) {
   e.printStackTrace();
  } finally{
   out.close();
  }
   
 }
  
}

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/yajunren/article/details/17760963

延伸 · 閱讀

精彩推薦
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在线| 国产精品网站在线观看 | 久久这里只有国产精品 | 免费黄色小视频 | 91视频观看 | 成人午夜毛片 | 精品日韩 | 黄色网在线看 | 亚洲免费在线播放 | 一区在线免费 | 久久精品日产第一区二区三区 | av久久| 日韩精品在线观看一区 | 欧美一区| 一区二区三区高清 | 久久中文字幕一区 | 亚洲国产一区在线 | 天天操天天操 | 国产免费高清 | 大胆一区 | 日韩精品观看 | 五月天导航 | 欧美在线视频网站 | 国产色秀视频在线观看 | 国产精品18久久久久久久久 | 伦理自拍 | 综合久久久久 | 国产欧美精品一区二区三区 | 成人欧美| 日本不卡免费新一二三区 | 国产精品一区二区视频 | 国产一区av在线 | 天堂俺去俺来也www久久婷婷 | 国内精品久久久久久影视8 有码在线 | 综合婷婷 | 精品国产乱码久久久久久1区2区 | 黄工厂精品免费观看 | 一区二区三区欧美 | 亚洲天堂成人在线 | 国产精品爱久久久久久久 | 国产剧情一区二区 |