Запросы без параметров HttpServer всегда возвращают java.net.SocketException из HttpServer

Я создал сервер, используя com.sun.net.httpserver.HttpServer. Сервер работает нормально, когда URL-адрес содержит параметры. Однако, когда URL-адрес не содержит никаких параметров, я получаю java.net.SocketException: Unexpected end of file с сервера

Я использую следующий код для отправки запроса:

URL serverUrl = new 
URL("http://localhost:"+MockServer.getInstance().getPort()+"/");
HttpURLConnection httpURLConnection =(HttpURLConnection)serverUrl.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setAllowUserInteraction(false);
httpURLConnection.setUseCaches(false);
int responseCode = httpURLConnection.getResponseCode();

Однако, когда я добавляю параметры к URL-адресу (как в строке ниже), нет никаких исключений, а затем я получаю responseCode=200 с ожидаемым результатом.

URL serverUrl = new URL("http://localhost:"+MockServer.getInstance().getPort()+"/?x=y");

Код на сервере:

httpServer = HttpServer.create( new InetSocketAddress(0),0);
httpServer.createContext("/", new MockHandler());
httpServer.setExecutor(null);
httpServer.start();

Какой код в MockHandler?

Marvin 08.04.2018 13:06

Думаю, проблема в MockHandler

terry.qiao 08.04.2018 13:25

Код в MockHandler: byte[] response = "MyResponse".getBytes();httpExchange.sendResponseHeaders(200,response.length);OutputStream os = httpExchange.getResponseBody();os.write(response);os.close(); Как я уже сказал, он отлично работает, если в URL-адресе есть параметры.

nimrodr 08.04.2018 14:04

Я не уверен, что вы используете правильный адрес Inet. Попробуйте, например: HttpServer httpServer = HttpServer.create (новый InetSocketAddress (InetAddress.getByName ("localhost"), 8888), 0); и для клиентского подключения: URL serverUrl = новый URL ("localhost: "+ 8888 +" /? x = y "); Я не знаю, что делает InetSocketAddress (0), но у него должен быть хотя бы номер порта (который 0 недействителен)

Marvin 09.04.2018 01:56

Спасибо @Marvin. Я попытался использовать определенный номер порта, как вы предложили, но это не решило проблему. Согласно документации, «допустимое значение порта находится в диапазоне от 0 до 65535. Нулевой номер порта позволит системе выбрать эфемерный порт в операции привязки». Параметры:

nimrodr 09.04.2018 09:49

Странно, возможно, у вас есть другие свойства, установленные в другой части кода, потому что этот код должен работать.

Marvin 09.04.2018 10:48

Есть идеи, кто-нибудь?

nimrodr 12.04.2018 15:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
79
0

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