Java 基于TCP的socket實作檔案傳輸
- 基于TCP的socket結合java的io流 實作用戶端與伺服器之間的檔案傳輸
Socket
套接字(socket)是一個抽象層,應用程式可以通過它發送或接收資料,可對其進行像對檔案一樣的打開、讀寫和關閉等操作。套接字允許應用程式将I/O插入到網絡中,并與網絡中的其他應用程式進行通信。網絡套接字是IP位址與端口的組合
設計思路
1、建立連接配接
兩個接口一個模仿伺服器,一個模仿用戶端 伺服器建立服務端口,
用戶端根據端口号和ip建立兩者間的連接配接
2、發送檔案
用戶端将檔案以輸入流的方式傳給伺服器
伺服器利用socket.getInputStream()方法擷取到用戶端傳進來的輸入流,并将其接收存放
3、接收回報資訊
伺服器接收成功後利用輸出流向用戶端發出回報
用戶端接收導伺服器的輸出資訊并列印下來
代碼實作
實作流程
伺服器
1、啟動伺服器
伺服器建立端口
伺服器監聽端口,等待通路資料。。。。。
3、伺服器接收用戶端發送過來的檔案
伺服器将回報消息發往用戶端
用戶端
2、啟動用戶端
用戶端與伺服器建立連接配接
用戶端将檔案以流的格式發送到伺服器上
用戶端等待伺服器回報。。。。。
4、用戶端接收伺服器發送過來的回報消息
1、用戶端
public static void main(String[] args) throws IOException {
//建立與伺服器的連接配接
Socket client = new Socket("192.168.3.76", 1617);
//建立用戶端輸出流
OutputStream out = client.getOutputStream();
//建立用戶端輸入流,将檔案發送伺服器
FileInputStream in =
new FileInputStream(new File("D:列印020.txt"));
byte[] buff = new byte[1024];
int len;
//io流讀寫資料
while ((len = in.read(buff)) != -1) {
out.write(buff, 0, len);
}
//将接收的資料發送出去 并 拒絕接收輸出流的資料
client.shutdownOutput();
//接收來自于伺服器端的回報,并顯示在控制台
InputStream sin = client.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(sin));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
//關閉資源
out.close();
in.close();
client.close();
sin.close();
reader.close();
}
2、伺服器
public static void main(String[] args) {
try (
// 伺服器接收用戶端的資料并傳回消息
ServerSocket server = new ServerSocket(1617);
//監聽要建立到此套接字的連接配接并接受
Socket socket = server.accept();
//建立輸入流接收用戶端發送過來的資料
InputStream in = socket.getInputStream();
//建立輸出流存放讀取的資料
OutputStream out = new FileOutputStream(new File("D:列印0211.txt"))
) {
byte[] buff = new byte[1024];
int len;
//io流讀寫資料
while ((len = in.read(buff)) != -1) {
out.write(buff, 0, len);
}
// 接收到圖檔後向用戶端回報
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8))
{
writer.write("你好,我已成功收到圖檔!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}