Отправьте запрос ping клиенту с веб-приложением в Tomcat
Я хотел бы создать веб-приложение, в котором сервер может "пинговать" клиента, основываясь на его общедоступном IP-адресе и порте, после того как клиент перейдет по определенной ссылке (например, / привет). Идея состоит в том, что пока сеанс все еще активен или в этом случае веб-приложение еще не ответило, я буду пинговать клиента, и клиент ответит на пинг. Но когда я делаю это, клиент как-то не отвечает на пинг. Для пинга я использую hping3 для пинга с IP и портом с возможным созданием пакета.
Мой код примерно такой:
@GET
@Path("/pingport2/{ip}/{port}")
public Response getPingIpPortResult2(@PathParam("ip") String ip, @PathParam("port") String port, @Context HttpServletRequest req) {
String result = null;
Map<String, String> res = pingIPPort2(ip, port);
result=gson.toJson(res);
return Response.status(200).entity(result).build();
}
public static Map<String, String> pingIPPort2(String ip, String port) {
String command = " sudo hping3 -A -c 5 -p " + port + " "+ ip;
Map<String, String> res = new HashMap<String, String>();
try {
Process proc = Runtime.getRuntime().exec(command);
BufferedReader reader =
new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
int i=0;
while((line = reader.readLine()) != null) {
// System.out.print(line + "\n");
res.put(Integer.toString(i), line);
i++;
if(line.contains("round-trip min/avg/max ")) {
String[] a = line.split("=");
System.out.println(a[1].trim());
String[] d = a[1].trim().split("/");
String mini = d[0];
String avg = d[1];
String max = d[2].substring(0, d[2].length()-3);
res.put("minimum", mini);
res.put("average",avg);
res.put("maximum",max);
}
}
proc.waitFor();
} catch (IOException | InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
Что-то не так с кодом? Или это невозможно сделать?
Спасибо