使用socket進(jìn)行服務(wù)端與客戶端傳文件的方法
邏輯:
1.客戶端將需要查找的文件名以流的形式傳給服務(wù)端
2.服務(wù)端接受客戶端的連接,把流轉(zhuǎn)化為字符串,進(jìn)行一個(gè)目錄的遍歷,查找是否存在需要的文件,若未找到,則輸出未找到,若找到,則將文件轉(zhuǎn)化為流,傳給客戶端
3.客戶端準(zhǔn)備接受,將服務(wù)端傳過來的流轉(zhuǎn)化為文件,存儲下載。
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,這種資源文件,以便測試。
總結(jié)
以上所述是小編給大家介紹的使用socket進(jìn)行服務(wù)端與客戶端傳文件的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
在IDEA中 實(shí)現(xiàn)給main方法附帶參數(shù)的操作
這篇文章主要介紹了在IDEA中 實(shí)現(xiàn)給main方法附帶參數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的實(shí)現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-10-10
Java實(shí)現(xiàn)線程插隊(duì)的示例代碼
在編寫多線程的業(yè)務(wù)時(shí),會遇到讓一個(gè)線程優(yōu)先于其他線程運(yùn)行的情況,除了可以設(shè)置線程的優(yōu)先級高于其他線程,還有更直接的方式:線程插隊(duì)。本文將用Java實(shí)現(xiàn)線程插隊(duì),需要的可以參考一下2022-08-08
Java通過CMD方式讀取注冊表任意鍵值對代碼實(shí)踐
這篇文章主要介紹了Java通過CMD方式讀取注冊表任意鍵值對代碼實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06

