思路:
客户端发送文件给服务器端,服务器端负责接收文件并存储。
下列代码测试通过,在IDEA中新建两个工程,每个工程的文件如下:
文件传输服务器端:
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();
}
}
}