我刚刚开始研究 HTTP 等,并编写了一个简单的 Java 客户端,它使用 URLConnection 将 URL 发送到服务器并拉下 index.html 页面(作为纯文本)。
现在我在一个简单的服务器上工作,但我被困在第一个障碍(可能是第二或第三),我无法让它正确响应客户端。
这是循环读取,它可以很好地读取 HTTP 请求,即使是 FF 和 IE 等:
while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}
问题是我不知道如何让它响应任何有用的东西。如果我让它在上面的代码中做它正在做的事情,它会向我的客户端发送 6 次“某事”(因为 HTTP 请求有 6 行)但对 FF/IE 等没有任何影响。
此外,它似乎并没有打破循环,因为我在System.out.println("test");
循环之后添加了一行要打印但服务器似乎永远不会达到那个点,不是吗?readLine() 应该在第一个 HTTP 请求结束时返回 null 吗?
我一直在阅读 sun 和 oracle 网站上的内容,但对于这应该如何工作仍然很困惑。
谢谢你的时间,
无限化
编辑:哎呀,忘了复制代码。
服务器.java:
package exercise2;
import java.net.*;
public class Server
{
public static void main(String[] args) throws Exception
{
boolean listening = true;
ServerSocket server = new ServerSocket(8081);
while(listening)
{
Socket client = server.accept();
new ServerThread(client).start();
}
server.close();
}
}
服务器线程.java:
package exercise2;
import java.io.*;
import java.net.*;
public class ServerThread extends Thread
{
private Socket socket = null;
public ServerThread(Socket s)
{
this.socket = s;
}
public void run()
{
try
{
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String message, reply = "";
while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}
System.out.println("test");
in.close();
out.close();
socket.close();
}
catch(IOException e)
{
System.err.println("error");
}
}
}