Java服务器文件共享
简介
在计算机网络中,文件共享是指多个计算机之间共享文件资源,方便用户之间的文件传输和共享。Java提供了一些API和库来实现服务器端的文件共享功能。本文将介绍如何使用Java实现一个简单的服务器文件共享功能,并提供相应的代码示例。
流程图
flowchart TD
A[启动服务器] --> B[监听端口]
B --> C[接受客户端请求]
C --> D[处理客户端请求]
D --> E[发送文件]
D --> F[接收文件]
E --> C
F --> C
类图
classDiagram
class Server {
+start() : void
+listenPort(port: int) : void
+acceptClient() : void
+handleRequest(client: Socket) : void
+sendFile(client: Socket, file: File) : void
+receiveFile(client: Socket, file: File) : void
}
代码示例
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private ServerSocket serverSocket;
private static final int PORT = 8888;
public static void main(String[] args) {
Server server = new Server();
server.start();
}
public void start() {
try {
serverSocket = new ServerSocket(PORT);
System.out.println("服务器已启动,等待客户端连接...");
listenPort();
} catch (IOException e) {
e.printStackTrace();
}
}
public void listenPort() {
while (true) {
try {
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接成功,IP地址:" + clientSocket.getInetAddress() +
",端口号:" + clientSocket.getPort());
handleRequest(clientSocket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void handleRequest(Socket client) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter writer = new PrintWriter(client.getOutputStream(), true);
String request = reader.readLine();
if (request.equals("GET")) {
String fileName = reader.readLine();
File file = new File(fileName);
if (file.exists()) {
sendFile(client, file);
} else {
writer.println("File not found");
}
} else if (request.equals("POST")) {
String fileName = reader.readLine();
File file = new File(fileName);
receiveFile(client, file);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendFile(Socket client, File file) {
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
OutputStream os = client.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void receiveFile(Socket client, File file) {
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
InputStream is = client.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结论
通过上述示例代码,我们可以看到如何使用Java实现一个简单的服务器文件共享功能。在该示例中,我们使用了ServerSocket
类来监听指定端口并接受客户端连接,通过Socket
类来进行数据的传输。当客户端发送"GET"请求时,服务器会将文件发送给客户端;当客户端发送"POST"请求时,服务器会接收客户端发送的文件。
使用Java实现服务器文件共享功能可以方便地实现文件的传输和共享,同时也为其他应用提供了基础功能。在实际应用中,可以根据需求进行更多的功能扩展和优化,例如添加身份验证、文件加密等功能。希望本文对你理解和使用Java服务器文件共享功能有所帮助。