-
Notifications
You must be signed in to change notification settings - Fork 219
Open
Description
/**
* 暴漏服务
* @param serviceImpl 服务的实现
* @param port 服务所处的端口号
*/
public static void export(Object serviceImpl, int port) {
try {
try (ServerSocket server = new ServerSocket(port)) {
while (!Thread.currentThread().isInterrupted()) {
Socket socket = server.accept();
new Thread(() -> {
try (ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {
Method method = serviceImpl.getClass().getMethod(in.readUTF(), (Class<?>[]) in.readObject());
Object result = method.invoke(serviceImpl, (Object[]) in.readObject());
try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream())) {
out.writeObject(result);
}
System.out.println("Invoke method [" + method.getName() + "()] success, form " + socket.getRemoteSocketAddress());
} catch (Exception e) {
throw new RuntimeException("Export service fail .", e);
}
}).start();
}
}
} catch (Exception e) {
throw new RuntimeException("Export service fail .", e);
}
System.out.println("Export service " + serviceImpl.getClass().getSimpleName() + " success on port " + port);
}
socket.accept的时候返回为null,下面就直接创建线程执行了。
Metadata
Metadata
Assignees
Labels
No labels