1
我使用com.sun.net.HttpServer類構建與像下面的Java HTTP服務器:的java:HTTP服務器和客戶端之間的HTTP會話
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();
}
}
}
我這個通信使用此客戶端的服務器:
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());
}
}
}
並且它正在工作。 但我現在想要的是服務器允許客戶端與他溝通一個會話,這意味着一系列的請求/響應不僅僅是一個。所以這將是一個請求/響應的循環。爲此,我嘗試添加第一步,向客戶端添加下面兩行:
writer.flush();
writer.write("Hello HTTP server!! I'm your client2");
但它不起作用。只有第一個請求被服務器捕獲。
如何更改代碼以實現我的目的?
請我需要一個答案。並提前感謝你。 –
例如,您是否需要執行另一個請求,或者您需要使用Cookie進行會話管理。 –
@CássioMazzochiMolin這是一個會話。只是客戶端和服務器之間請求/響應的簡單順序。 我在示例中添加到客戶端的其他請求只是兩個請求會話的嘗試。如果它適用於2個請求,那麼它也可以用於3,4,... 以相同的方式 –