我正在尝试使用java创建一个简单的http客户端服务器。它将显示客户端的请求以及服务器的响应。例如,服务器将发回
HTTP/1.0 200 OK
Connection: Close. etc.
以前我有一个echo客户端服务器。现在我已经将我的echo服务器作为http服务器。我已经尝试过Goggling如何实现头部并获得客户端但我注意到通常所有的示例都使用了apache框架。有没有办法在没有apache框架的情况下实现这些方法。 我的echo客户端,我正在尝试转换为http客户端:
import java.io.*;
import java.net.*;
public class Ec1
{
public static void main(String[] args)
{
try
{
Socket s = new Socket("127.0.0.1", 80);
BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter w = new PrintWriter(s.getOutputStream(), true);
BufferedReader con = new BufferedReader(new InputStreamReader(System.in));
String line;
do
{
line = r.readLine();
if ( line != null )
System.out.println(line);
line = con.readLine();
w.println(line);
}
while ( !line.trim().equals("bye") );
}
catch (Exception err)
{
System.err.println(err);
}
}
}
我的Http服务器:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Echo
{
protected void start() {
ServerSocket s;
System.out.println("Webserver starting up on port 80");
try {
// create the main server socket
s = new ServerSocket(80);
} catch (Exception e) {
System.out.println("Error: " + e);
return;
}
Socket clientSocket = null;
System.out.println ("Waiting for connection.....");
try {
clientSocket = s.accept();
System.out.println("Connection, sending data.");
BufferedReader in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
String str = ".";
while (!str.equals(""))
str = in.readLine();
out.println("HTTP/1.0 200 OK");
out.println("Content-Type: text/html");
out.println("Server: Bot");
out.println("");
out.println("<H1>Welcome to the Ultra Mini-WebServer</H2>");
out.flush();
clientSocket.close();
s.close();
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
public static void main(String args[]) {
WebServer ws = new WebServer();
ws.start();
}
}
答案 0 :(得分:1)
每个人都为客户端和/或服务器端使用某种类型的库或框架,因为HTTP有点复杂,并且不需要重新发明每个轮子。但是,很有可能通过直接从HTTP的RFC开始编写自己的实现。
答案 1 :(得分:1)
是的,只需要解释您从客户那里得到的请求。
从以下代码(在HttpServer
中),解析:
String str = ".";
while (!str.equals("")) {
str = in.readLine();
if (str.startsWith("HEAD")) {
//Head execution here...
}
}
等等...