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
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Cybera client - Télécharger - Divers Réseau & Wi-Fi
- Http //192.168.l.l - Guide