用Java写一个文件传送器
由于文件传送器可以有很多种实现方式,我在这里提供一种基于Socket的简单实现方式。
首先创建一个服务器端,代码如下:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server started");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());
DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
String fileName = dis.readUTF();
System.out.println("Receiving file: " + fileName);
FileOutputStream fos = new FileOutputStream(fileName);
byte[] buffer = new byte[4096];
int read = 0;
while ((read = dis.read(buffer)) != -1) {
fos.write(buffer, 0, read);
}
fos.close();
dis.close();
clientSocket.close();
System.out.println("File received: " + fileName);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个服务器端监听端口号为8888,一旦有客户端连接,就会接收客户端发送的文件并保存在本地。
接下来创建一个客户端,代码如下:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
System.out.println("Connected to server");
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(file.getName());
byte[] buffer = new byte[4096];
int read = 0;
while ((read = fis.read(buffer)) != -1) {
dos.write(buffer, 0, read);
}
fis.close();
dos.close();
socket.close();
System.out.println("File sent: " + file.getName());
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个客户端连接到服务器端的8888端口,将本地的test.txt文件发送到服务器端。
注意在实际运行中,需要先启动服务器端,再启动客户端。另外,这个实现方式还存在很多问题,如没有进行错误处理、没有考虑传输大文件时的性能问题等,仅供参考
原文地址: https://www.cveoy.top/t/topic/fleU 著作权归作者所有。请勿转载和采集!