Java HTTP client IOException: fixed content-length - bytes r
Biwitie
-
Biwitie -
Biwitie -
Je travaille sur un projet Java visant à créer une API pour un jeu de bataille navale. J'ai rencontré un problème avec le client HTTP, provoquant l'erreur java.io.IOException: fixed content-length: 118, bytes received: 0. Le problème survient lorsque j'essaie d'envoyer une requête POST vers une endpoint spécifique. Voici le code pertinent :
Launcher Class:
import fr.lernejo.navy_battle.misc.ConnectHunter; import fr.lernejo.navy_battle.misc.IdCreatorHunter; import fr.lernejo.navy_battle.misc.game.board.*; import java.util.concurrent.atomic.AtomicInteger; public class Launcher { private static final AtomicInteger port = new AtomicInteger(); public static void main(String[] args) { if (args.length < 1){ System.err.println("Port not specified"); System.exit(1); } var board = new BoardReadyToFight().createFinalBoard(); try { port.set(Integer.parseInt(args[0]));} catch (Exception e){ System.err.println("Enter a valid port"); System.exit(1); } System.out.println("Server is ready to fight on port: " + port); try { new StartServerHunter().startServer(port.get()); if (args.length == 2){ String id = new IdCreatorHunter().createId(); String message = "Hell yeah! I'm ready for a fight!"; new ConnectHunter(Integer.toString(port.get()), args[1], id, message); } } catch (Exception e) { throw new RuntimeException(e); } } public static int getPort() { return port.get(); } }
The class that create all the server needs
package fr.lernejo.navy_battle; import com.sun.net.httpserver.HttpServer; import fr.lernejo.navy_battle.handler.PingHandlerHunter; import fr.lernejo.navy_battle.handler.VerbHandlerHunter; import java.io.IOException; import java.net.InetSocketAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class StartServerHunter { public final void startServer(int port) throws IOException { final HttpServer server = com.sun.net.httpserver.HttpServer.create(new InetSocketAddress(port), 0); final String path_ping = "/ping"; final String path_game = "/api/game/start"; final String path_shoot = "/api/game/fire"; ExecutorService threadPool = Executors.newFixedThreadPool(1); server.setExecutor(threadPool); server.createContext(path_ping, new PingHandlerHunter()); server.createContext(path_game, new VerbHandlerHunter()); server.createContext(path_shoot, new VerbHandlerHunter()); server.start(); } }
And here the class that causing probleme
package fr.lernejo.navy_battle.misc; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class ConnectHunter { public ConnectHunter(String args, String url, String id, String message) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String requestBody = String.format("{\"id\": \"%s\", \"url\": \"", \"message\": \"%s\"}", id, args, message); HttpRequest requestPost = HttpRequest.newBuilder() .uri(URI.create(url + "/api/game/start")) .setHeader("Accept", "application/json") .POST(HttpRequest.BodyPublishers.ofString(requestBody)) .build(); System.out.println(requestPost); client.send(requestPost, HttpResponse.BodyHandlers.ofString()); } }
Here the exception
Server is ready to fight on port: 4321 http://localhost:1234/api/game/start POST Exception in thread "main" java.lang.RuntimeException: java.io.IOException: fixed content-length: 118, bytes received: 0 at fr.lernejo.navy_battle.Launcher.main(Launcher.java:22) Caused by: java.io.IOException: fixed content-length: 118, bytes received: 0 at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:964) at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) at fr.lernejo.navy_battle.misc.ConnectHunter.<init>(ConnectHunter.java:23) at fr.lernejo.navy_battle.Launcher.main(Launcher.java:20)
Informations supplémentaires :
- Le serveur est configuré en utilisant la classe
StartServerHunter
. - Le problème survient lors de l'envoi d'une requête POST depuis la classe
ConnectHunter
. - J'ai essayé avec des valeurs statiques et avec
AsyncSend
. Dans tous les cas, le message est envoyé, mais l'application plante juste après.
Exemple du message reçu par la première instance :
{"id": "ACQAETJB-HLYW-ESWV-EDYN-NDMPBKHWLVWA", "url": "http://localhost:1234", "message": "May the force be with you"}
A voir également:
- Java HTTP client IOException: fixed content-length - bytes r
- Http - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Cybera client - Télécharger - Divers Réseau & Wi-Fi
- Eclipse java - Télécharger - Langages