使用socket進(jìn)行服務(wù)端與客戶端傳文件的方法
邏輯:
1.客戶端將需要查找的文件名以流的形式傳給服務(wù)端
2.服務(wù)端接受客戶端的連接,把流轉(zhuǎn)化為字符串,進(jìn)行一個(gè)目錄的遍歷,查找是否存在需要的文件,若未找到,則輸出未找到,若找到,則將文件轉(zhuǎn)化為流,傳給客戶端
3.客戶端準(zhǔn)備接受,將服務(wù)端傳過來的流轉(zhuǎn)化為文件,存儲(chǔ)下載。
4,至此,完成一個(gè)簡單的客戶端與服務(wù)端傳輸文件的小栗子~
Client.Java
package com.ysk; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 5555); OutputStream os = socket.getOutputStream();// 字節(jié)輸出流 PrintWriter pw = new PrintWriter(os); pw.write("aa.txt");//輸入需要搜索的文件名 pw.flush(); socket.shutdownOutput(); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String a = ""; String temp = ""; while ((temp = in.readLine()) != null) { a += temp; } PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("src\\asb.txt"))); out.write(a); out.flush(); out.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } } }
Server.java
package com.ysk; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { static ServerSocket serverSocket; public static void main(String[] args) { try { serverSocket = new ServerSocket(5555); System.out.println("***服務(wù)器即將啟動(dòng),等待客戶端的連接***"); Socket socket = serverSocket.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String file = br.readLine(); findFile("src", file); if (result) { System.out.println("已找到" + file); File f = new File(file); // File copyfile = new File("src\\file", "bb.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filepath + file))); System.out.println(filepath + file); String a = ""; String temp = ""; while ((temp = in.readLine()) != null) { a += temp; } PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); out.write(a); out.flush(); socket.shutdownOutput(); } else { System.out.println("未找到文件"); } } catch (IOException e) { e.printStackTrace(); } }
需自備aa.txt,這種資源文件,以便測(cè)試。
總結(jié)
以上所述是小編給大家介紹的使用socket進(jìn)行服務(wù)端與客戶端傳文件的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
在IDEA中 實(shí)現(xiàn)給main方法附帶參數(shù)的操作
這篇文章主要介紹了在IDEA中 實(shí)現(xiàn)給main方法附帶參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的實(shí)現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-10-10Java實(shí)現(xiàn)線程插隊(duì)的示例代碼
在編寫多線程的業(yè)務(wù)時(shí),會(huì)遇到讓一個(gè)線程優(yōu)先于其他線程運(yùn)行的情況,除了可以設(shè)置線程的優(yōu)先級(jí)高于其他線程,還有更直接的方式:線程插隊(duì)。本文將用Java實(shí)現(xiàn)線程插隊(duì),需要的可以參考一下2022-08-08Java開發(fā)之request對(duì)象常用方法整理
這篇文章主要介紹了 Java開發(fā)之request對(duì)象常用方法整理的相關(guān)資料,需要的朋友可以參考下2017-02-02Java線程中斷及線程中斷的幾種使用場(chǎng)景小結(jié)
在并發(fā)編程中,合理使用線程中斷機(jī)制可以提高程序的魯棒性和可維護(hù)性,本文主要介紹了Java線程中斷及線程中斷的幾種使用場(chǎng)景小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Java通過CMD方式讀取注冊(cè)表任意鍵值對(duì)代碼實(shí)踐
這篇文章主要介紹了Java通過CMD方式讀取注冊(cè)表任意鍵值對(duì)代碼實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06