用文字描述使用Socket技术实现客户端与服务器之间进行文本文件传输的实现过程
具体要求为:
客户端发送文件名到服务器
服务器接收文件名后在指定目录下判断有无该文本文件
有该文件则传输该文件到客户端, 无则告知客户端无此文件
讲述实现过程及列出核心代码
引用 皆我百晓生 小程序回复内容作答:
实现过程:
核心代码:
服务器端:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,绑定端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
// 监听客户端连接请求
Socket socket = serverSocket.accept();
// 获取输入流,读取文件名
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String filename = reader.readLine();
System.out.println("服务器收到文件名:" + filename);
// 判断文件是否存在
File file = new File("指定目录路径" + filename);
if (file.exists()) {
// 文件存在,创建输出流,传输文件给客户端
OutputStream outputStream = socket.getOutputStream();
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
fileInputStream.close();
outputStream.close();
System.out.println("文件传输完成");
} else {
// 文件不存在,返回错误信息给客户端
OutputStream outputStream = socket.getOutputStream();
outputStream.write("文件不存在".getBytes());
outputStream.close();
System.out.println("文件不存在,错误信息已发送");
}
// 关闭连接
reader.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket对象,指定服务器IP和端口
Socket socket = new Socket("服务器IP", 8888);
// 创建输出流,发送文件名给服务器
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.println("文件名");
writer.flush();
System.out.println("文件名已发送");
// 创建输入流,接收服务器返回的文件或错误信息
InputStream inputStream = socket.getInputStream();
// 创建输出流,写入文件
FileOutputStream fileOutputStream = new FileOutputStream("保存文件的路径");
byte[] buffer = new byte[1024];
int length;
// 读取服务器返回的数据
while ((length = inputStream.read(buffer)) != -1) {
// 将数据写入文件
fileOutputStream.write(buffer, 0, length);
}
System.out.println("文件接收完成");
// 关闭连接
fileOutputStream.close();
inputStream.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
需要替换的内容:
指定目录路径
改成实际的文件存储路径。服务器IP
改成实际的服务器IP。服务器IP
改成实际的服务器IP。文件名
改成实际的待请求文件名。保存文件的路径
改成实际的文件保存路径。可私聊,帮忙解决
题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。
实现过程:
Java核心代码:
客户端代码:
// 1. 客户端发送文件名到服务器
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF(fileName);
dataOutputStream.flush();
// 4. 如果有,服务器将该文件传输给客户端
InputStream inputStream = socket.getInputStream();
if (inputStream.read() != -1) {
FileOutputStream fileOutputStream = new FileOutputStream(new File("path/to/save/file"));
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, length);
}
fileOutputStream.close();
}
// 5. 如果没有,服务器告知客户端无此文件
else {
System.out.println("文件不存在");
}
socket.close();
服务器端代码:
// 2. 服务器接收文件名
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
String fileName = dataInputStream.readUTF();
// 3. 服务器在指定目录下查找是否有该文件
File file = new File("path/to/search/file");
if (file.exists() && file.isFile()) {
// 4. 如果有,服务器将该文件传输给客户端
OutputStream outputStream = socket.getOutputStream();
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
fileInputStream.close();
outputStream.flush();
}
// 5. 如果没有,服务器告知客户端无此文件
else {
OutputStream outputStream = socket.getOutputStream();
outputStream.write(-1);
outputStream.flush();
}
socket.close();
// 1. 客户端发送文件名到服务器
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF(fileName);
dataOutputStream.flush();
// 4. 如果有,服务器将该文件传输给客户端
InputStream inputStream = socket.getInputStream();
if (inputStream.read() != -1) {
FileOutputStream fileOutputStream = new FileOutputStream(new File("path/to/save/file"));
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, length);
}
fileOutputStream.close();
}
// 5. 如果没有,服务器告知客户端无此文件
else {
System.out.println("文件不存在");
}
socket.close();
简单来说,分为3个步骤,分别是
1、建立连接
两个接口一个模仿服务器,一个模仿客户端 服务器创建服务端口,
客户端根据端口号和ip创建两者间的连接
2、发送文件
客户端将文件以输入流的方式传给服务器
服务器利用socket.getInputStream()方法获取到客户端传进来的输入流,并将其接收存放
3、接收反馈信息
服务器接收成功后利用输出流向客户端发出反馈
客户端接收导服务器的输出信息并打印下来(也可以是存为文件)