java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式
Socket的簡單認識
Socket是一種面向連接的通信協議,Socket應用程序是一種C/S(Client端/Server端)結構的應用程序 Socket是兩臺機器間通信的端點。 Socket是連接運行在網絡上的兩個程序間的雙向通訊端點。
Socket通信原理
Server服務端的輸入流相當于Client客戶端的輸出流
Server服務端的輸出流相當于Client客戶端的輸入流
注意
文件傳輸使用字節流**(Steam)**
使用DataOutputStream,DataOutputStream可以傳java的基本類型和流
代碼
Server.java
package csmode2;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author StarsOne
* @date Create in 2019-4-14 0014 10:53:58
* @description
*/
class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(9090)){
System.out.println("服務器已啟動...");
while (true) {
System.out.println("等待接收文件");
//調用了accept方法之后,會一直處于等待接受文件的狀態
Socket socket = serverSocket.accept();//接收客戶端傳來的數據
//交給后臺線程處理
new AcceptThread(socket.getInputStream()).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
AcceptThread.java
package csmode2;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author StarsOne
* @date Create in 2019/4/15 0015 14:17
* @description
*/
class AcceptThread extends Thread {
private InputStream inputStream;
public AcceptThread(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public void run() {
try {
//使用DataInputStream包裝輸入流
DataInputStream dataInputStream = new DataInputStream(inputStream);
String fileName = dataInputStream.readUTF();
System.out.println(fileName);//在控制臺顯示文件名
//往某個位置寫入文件
FileOutputStream fileOutputStream = new FileOutputStream("Q:\\MY" + File.separator + fileName);
int c = -1;
while ((c = dataInputStream.read()) != -1) {
fileOutputStream.write(c);
fileOutputStream.flush();
}
System.out.println("文件上傳成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client.java
package csmode2;
import java.io.*;
import java.net.Socket;
/**
* @author StarsOne
* @date Create in 2019-4-14 0014 10:53:49
* @description
*/
class Client {
public static void main(String[] args) {
// File[] files = new File("E:\\wan\\testfile").listFiles();
//如果是多個文件,只需要把文件放入一個list或者數組中,使用for循環把數組的文件全部上傳到服務器
//上傳的文件
File file = new File("R:\\動漫圖片\\test.jpg");
try(Socket socket = new Socket("localhost", 9090)) {
OutputStream outputStream = socket.getOutputStream();
//使用DataOutputStream
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
//向服務器端傳文件名
dataOutputStream.writeUTF(file.getName());
dataOutputStream.flush();//刷新流,傳輸到服務端
//向服務器端傳文件,通過字節流
//字節流先讀取硬盤文件
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
int c = -1;
while ((c=bufferedInputStream.read())!=-1) {
//將讀取的文件以字節方式寫入DataOutputStream,之后傳輸到服務端
//這里也可以使用byte[]數據進行讀取和寫入
dataOutputStream.write(c);
dataOutputStream.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
總結
以上是生活随笔為你收集整理的java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go 连接服务器 并存放图片_基于 Go
- 下一篇: java atd_Java字符串Stri