Я создал сервер, используя 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
Код в MockHandler: byte[] response = "MyResponse".getBytes();httpExchange.sendResponseHeaders(200,response.length);OutputStream os = httpExchange.getResponseBody();os.write(response);os.close(); Как я уже сказал, он отлично работает, если в URL-адресе есть параметры.
Я не уверен, что вы используете правильный адрес Inet. Попробуйте, например: HttpServer httpServer = HttpServer.create (новый InetSocketAddress (InetAddress.getByName ("localhost"), 8888), 0); и для клиентского подключения: URL serverUrl = новый URL ("localhost: "+ 8888 +" /? x = y "); Я не знаю, что делает InetSocketAddress (0), но у него должен быть хотя бы номер порта (который 0 недействителен)
Спасибо @Marvin. Я попытался использовать определенный номер порта, как вы предложили, но это не решило проблему. Согласно документации, «допустимое значение порта находится в диапазоне от 0 до 65535. Нулевой номер порта позволит системе выбрать эфемерный порт в операции привязки». Параметры:
Странно, возможно, у вас есть другие свойства, установленные в другой части кода, потому что этот код должен работать.
Есть идеи, кто-нибудь?




Какой код в MockHandler?