2016-07-27 9 views
1

Ich verwende com.sun.net.HttpServer Klasse einen http-Server mit Java zu bauen wie folgt aus:java: HTTP-Sitzung zwischen einem HTTP-Server und einem 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(); 
    } 
    } 
} 

ich mit diesem zu kommunizieren bin Server mit diesem 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()); 
     } 
    } 
} 

und es funktioniert. aber was ich jetzt will, ist, dass der Server dem Client erlaubt, mit ihm für eine Sitzung zu kommunizieren, die eine Folge von Anfrage/Antwort bedeutet, nicht nur eine. Es wird also eine Schleife von Anfrage/Antwort sein. Zu diesem Zweck habe ich versucht, als einen ersten Schritt nur eine Anforderung an den Client hinzufügen, indem es diese beiden Zeilen:

writer.flush(); 
writer.write("Hello HTTP server!! I'm your client2"); 

Aber es funktioniert nicht. Nur die erste Anfrage wird vom Server abgefangen.

Wie kann ich den Code ändern, um meinen Zweck zu erreichen?

+0

bitte ich brauche eine Antwort. und danke im voraus. –

+0

Sie müssen nur eine andere Anfrage ausführen oder Sie benötigen zum Beispiel eine Sitzungsverwaltung mit Cookies. –

+0

@ CássioMazzochiMolin ist eine Sitzung. nur eine einfache Abfolge von Anfrage von Anfrage/Antwort zwischen dem Client und dem Server. Die andere Anforderung, die ich dem Client in meinem Beispiel hinzugefügt habe, ist nur ein Versuch einer Sitzung mit zwei Anforderungen. Wenn es für 2 Anfragen funktioniert, so kann es auch für 3, 4, ... mit dem gleichen Weg –

Antwort

1

Bitte überprüfen Sie den Code unten:

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

danke es funktioniert –

Verwandte Themen