先运行启动服务器端,再启动客户端, 如果服务器和客户端不在同一电脑上(正常也不会在同一电脑上),一定要在同一局域网下,客户端IP改为服务器电脑的IP即可
服务器运行完可以一直启动,客户就能一直往服务器发文件了,可以同时很多客户端同时上传文件,文件名相同的文件也不会被覆盖
服务器端代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
while (true) {
Socket socket = server.accept();
new Thread() {
@Override
public void run() {
FileOutputStream out = null;
try {
InputStream in = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
PrintStream ps = new PrintStream(socket.getOutputStream());
String filename = reader.readLine();
ps.println("正在上传...");
String string = UUID.randomUUID().toString();
out = new FileOutputStream("D:\\接收文件" + string + "_" + filename);
byte[] arr = new byte[1024 * 8];
int len;
while ((len = in.read(arr)) != -1) {
out.write(arr, 0, len);
}
ps.println("上传成功!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
}
客户端代码
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 9999);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
File file = new File("G:\\ftp\\美少女.jpg");
ps.println(file.getName());
String s = reader.readLine();
System.out.println(s);
FileInputStream in = new FileInputStream(file);
byte[] arr = new byte[1024 * 8];
int len;
while ((len = in.read(arr)) != -1) {
ps.write(arr, 0, len);
}
socket.shutdownOutput();
String result = reader.readLine();
System.out.println(result);
in.close();
socket.close();
}
}