У меня есть устройство GPS, которое подключено через http через данный порт для отправки и получения данных с http-сервера.Для тестирования я создал простой Java-сервер Java, который читает запрос и отправляет ответ.вот мой код:
public class simpleHTTPServer {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
HttpContext context = server.createContext("/");
context.setHandler(simpleHTTPServer::handleRequest);
server.start();
}
private static void handleRequest(HttpExchange exchange) throws IOException {
// URI requestURI = exchange.getRequestURI();
printRequestInfo(exchange);
System.out.println("sending command..");
String response = "123456";
exchange.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
private static void printRequestInfo(HttpExchange exchange) {
System.out.println("-- headers --");
Headers requestHeaders = exchange.getRequestHeaders();
requestHeaders.entrySet().forEach(System.out::println);
System.out.println("-- principle --");
HttpPrincipal principal = exchange.getPrincipal();
System.out.println(principal);
System.out.println("-- HTTP method --");
String requestMethod = exchange.getRequestMethod();
System.out.println(requestMethod);
System.out.println("-- query --");
URI requestURI = exchange.getRequestURI();
String query = requestURI.getQuery();
System.out.println(query);
}
}
На самом деле это устройство подтвердило, что оно подключено к http-серверу (http://mydomain:9090) и непрерывно отправляет данные, но в моей работающей программе http-сервера я не смог получить ни одного запросас этого устройства.
Чтобы проверить это, я взял tcpdump на порту 9090 и проверил с помощью Wireshark, что это устройство успешно отправляет запросы. Я немного запутался, так как Wireshark показывает, что запрос идет по протоколу TCP.Как я могу прочитать этот запрос через http в Java?
Вот пример информации Wireshark: