Отправьте запрос 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;

    }

Что-то не так с кодом? Или это невозможно сделать?

Спасибо

0 ответов

Другие вопросы по тегам