Java TCP 实现文件传输
Java TCP 实现文件传输
环境
CentOS Linux release 8.1.1911 (Core)
java version "14.0.2" 2020-07-14
实现代码
ReceiveFileServer
其中,<port>
为接收文件进程使用的端口号
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ReceiveFileServer {private static final int PORT = <port>;private static final int BUFFER_SIZE = 1000;public static void main(String[] args) {try {while (true) {ServerSocket serverSocket = new ServerSocket(PORT);Socket socket = serverSocket.accept();InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));String fileName = bufferedReader.readLine().toString();FileOutputStream fileOutputStream = new FileOutputStream(fileName);socket = serverSocket.accept();inputStream = socket.getInputStream();byte[] buffer = new byte[BUFFER_SIZE];int length = 0;while ((length = inputStream.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, length);}fileOutputStream.flush();System.out.println("Receive file [" + fileName + "]");socket.close();serverSocket.close();fileOutputStream.close();}} catch(IOException e) {e.printStackTrace();}}
}
SendFileClient
其中<hostname>
为服务器IP地址,<port>
为接收文件进程使用的端口号,与上述服务器端代码中的端口号一致
sendMessage
方法中的message
变量为在服务器中保存的路径
package com.demo.filetransmission;import java.io.*;
import java.net.Socket;
import java.util.Arrays;public class SendFileClient {private static final String IP = "<hostname>";private static final int PORT = <port>;public void sendMessage(String message) {Socket socket = null;OutputStream outputStream = null;try {socket = new Socket(IP, PORT);outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);System.out.println("Sending...");System.out.println(message);dataOutputStream.write(message.getBytes("utf-8"));dataOutputStream.flush();System.out.println("Send Successfully!");socket.shutdownOutput();} catch (IOException e) {e.printStackTrace();} catch (UnknownError e) {e.printStackTrace();} finally {try {socket.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}}public void uploadFile(String fileName) {Socket socket = null;FileInputStream fileInputStream = null;OutputStream outputStream = null;OutputStream fileNameOutputStream = null;DataOutputStream dataOutputStream;try {socket = new Socket(IP, PORT);fileInputStream = new FileInputStream(fileName);outputStream = socket.getOutputStream();byte[] buffer = new byte[1024];int length = 0;while ((length = fileInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, length);}socket.shutdownOutput();} catch (IOException e) {e.printStackTrace();} catch (UnknownError e) {e.printStackTrace();} finally {try {fileInputStream.close();socket.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {SendFileClient client = new SendFileClient();client.sendMessage("./res/file.mp4");client.uploadFile("./res/file.mp4");}
}
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!
发布评论