アイデア:
クライアントはサーバーにファイルを送信し、サーバーはファイルの受信と保存を担当します。
次のコードテストに合格し、IDEAで2つの新しいプロジェクトを作成します。各プロジェクトのファイルは、次のとおりです。
ファイル転送サーバー側:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static final int PORT = 8888;
public static void main(String[] args) {
try {
// 创建socket
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Listening on port " + PORT);
// 监听客户端连接
Socket socket = serverSocket.accept();
// 接收客户端发来的文件
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
// 将文件存储在本地
PrintWriter writer = new PrintWriter(
new FileOutputStream("e:\\djtest\\receive\\just.txt", true)
);
// 真正的存储过程:逐行读取并存储
String line = null;
while((line = reader.readLine()) != null){
writer.println(line);
}
writer.close();
// 返回信息给客户端
PrintWriter responseWriter = new PrintWriter(socket.getOutputStream(), true);//一定要加true
responseWriter.println("服务端:接收完毕!");
// 释放系统资源
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ファイル転送クライアント:
import java.io.*;
import java.net.Socket;
public class Client {
private static final String HOST_IP = "192.168.43.43";
private static final int PORT = 8888;
public static void main(String[] args) {
try {
// 创建套接字
Socket socket = new Socket(HOST_IP, PORT);
// 按行读取文件
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream("e:\\djtest\\send\\just.txt"))
);
// 将文件写入网络
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 真正的发送过程:逐行写入网络
String line = null;
while((line = reader.readLine()) != null){
System.out.println(line);
writer.println(line);
}
socket.shutdownOutput();
// 接收服务端返回的信息
BufferedReader respReader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
// 将服务端返回的信息打印出来
String response = respReader.readLine();
System.out.println(response);
// 把资源还给系统
writer.close();
reader.close();
respReader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}