2016-07-27 1 views
1

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?

+0

s'il vous plaît je besoin d'une réponse. et merci d'avance. –

+0

Avez-vous besoin d'effectuer une autre requête ou vous avez besoin d'une gestion de session avec des cookies, par exemple. –

+0

@ 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 –

Répondre

1

S'il vous plaît vérifier le code ci-dessous:

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 Test1 { 

static String urlstr = "http://127.0.0.1:8989"; 
public static void main(String argv) throws IOException{ 
    URL url = new URL(urlstr); 
    Test1 t = new Test1(); 
    for (int i = 0; i < 10; i++) { 
     t.sendRequest("Hello HTTP server!! I'm your client" + i, url); 
    } 

} 

private void sendRequest(String strToSend, URL url) throws IOException{ 

    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoOutput(true); 

    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
    writer.write(strToSend); 

    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()); 
    } 
} 

}

+0

merci ça marche –