用java在Windows环境下建立一个文件服务器使用TCP的方式由客户机连接到服务器
- 创建一个ServerSocket对象,指定端口号。
ServerSocket serverSocket = new ServerSocket(8888);
- 使用while循环监听客户端的连接请求。
while (true) {
Socket socket = serverSocket.accept();
// 处理客户端连接
}
- 在客户端连接之后,可以使用socket对象获取输入输出流进行数据传输。
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
- 可以使用BufferedReader和PrintWriter等类进行数据读写操作。
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream);
- 可以使用File类进行文件操作,读取或者写入文件。
File file = new File("文件路径");
- 完成文件传输后,关闭socket和流等资源。
socket.close();
reader.close();
writer.close();
完整代码示例:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream);
String filePath = reader.readLine();
System.out.println("文件路径:" + filePath);
File file = new File(filePath);
if (!file.exists()) {
// 文件不存在
writer.println("File not found");
writer.flush();
} else {
// 文件存在,开始传输
writer.println("File name: " + file.getName());
writer.flush();
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
outputStream.flush();
}
fileInputStream.close();
}
socket.close();
reader.close();
writer.close();
}
}
}
客户端代码示例:
import java.io.*;
import java.net.Socket;
public class FileClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8888);
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream);
String filePath = "文件路径";
writer.println(filePath);
writer.flush();
String response = reader.readLine();
if (response.startsWith("File not found")) {
System.out.println("文件不存在");
} else {
System.out.println(response);
FileOutputStream fileOutputStream = new FileOutputStream(new File("文件保存路径"));
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
fileOutputStream.flush();
}
fileOutputStream.close();
}
socket.close();
reader.close();
writer.close();
}
}
``
原文地址: https://www.cveoy.top/t/topic/flhL 著作权归作者所有。请勿转载和采集!