使用socket進(jìn)行服務(wù)端與客戶端傳文件的方法
邏輯:
1.客戶端將需要查找的文件名以流的形式傳給服務(wù)端
2.服務(wù)端接受客戶端的連接,把流轉(zhuǎn)化為字符串,進(jìn)行一個目錄的遍歷,查找是否存在需要的文件,若未找到,則輸出未找到,若找到,則將文件轉(zhuǎn)化為流,傳給客戶端
3.客戶端準(zhǔn)備接受,將服務(wù)端傳過來的流轉(zhuǎn)化為文件,存儲下載。
4,至此,完成一個簡單的客戶端與服務(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ù)器即將啟動,等待客戶端的連接***"); 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,這種資源文件,以便測試。
總結(jié)
以上所述是小編給大家介紹的使用socket進(jìn)行服務(wù)端與客戶端傳文件的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
在IDEA中 實現(xiàn)給main方法附帶參數(shù)的操作
這篇文章主要介紹了在IDEA中 實現(xiàn)給main方法附帶參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的實現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-10-10