J'utilise classe com.sun.net.HttpServer pour construire un serveur http avec java comme ce qui suit:java: la session HTTP entre un serveur HTTP et un client
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.concurrent.Executors;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class SimpleHttpServer {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8989), 0);
server.createContext("/", new MyHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
//Read the request
InputStream in = httpExchange.getRequestBody();
StringWriter writer = new StringWriter();
IOUtils.copy(in, writer);
String inputString = writer.toString();
//prepare the response
httpExchange.sendResponseHeaders(200, "Hi my faithful client".length());
OutputStream os = httpExchange.getResponseBody();
os.write("Hi my faithful client".getBytes());
os.close();
}
}
}
Je communique avec ce serveur utilisant ce client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String argv[]) throws IOException{
String urlstr = "http://127.0.0.1:8989";
URL url = new URL(urlstr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write("Hello HTTP server!! I'm your client1");
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder result = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
result.append(line);
System.out.println(result.toString());
}
}
}
et cela fonctionne bien. mais ce que je veux maintenant, c'est que le serveur permet au client de communiquer avec lui pour une session qui signifie une séquence de demande/réponse et pas seulement une. Ce sera donc une boucle de demande/réponse. A cet effet, j'ai essayé d'ajouter une première étape seulement une demande au client en lui ajoutant ces deux lignes:
writer.flush();
writer.write("Hello HTTP server!! I'm your client2");
Mais cela ne fonctionne pas. Juste la première demande est interceptée par le serveur. Comment puis-je changer le code pour atteindre mon objectif?
s'il vous plaît je besoin d'une réponse. et merci d'avance. –
Avez-vous besoin d'effectuer une autre requête ou vous avez besoin d'une gestion de session avec des cookies, par exemple. –
@ CássioMazzochiMolin c'est une session. juste une simple séquence de requête de requête/réponse entre le client et le serveur. L'autre requête que j'ai ajoutée au client dans mon exemple est juste une tentative d'une session de deux requêtes. Si cela fonctionne pour 2 demandes, donc ça peut aussi pour 3, 4, ... de la même façon –