【发布时间】:2019-03-27 10:54:53
【问题描述】:
我正在尝试编写一个非常简单 java 服务器,它主要是来自Oracle tutorial 的复制粘贴,并通过我的 LAN IP 192.168 从浏览器访问它。 0.106/?Q1。
我的程序在终端输出“Ready...”,但不输出浏览器查询 Q1。然后我对同一 IP 进行第二次查询 Q2 并程序打印它:“GET /?Q2 HTTP/1.1...”。
当我对 127.0.0.1(Q1 和 Q2)执行相同的查询时,程序在第一次查询时会输出“Ready...”,但在第二次查询时会输出“null”。
为什么我丢失了我的第一个查询?是我的 in.readLine() 造成的吗?为什么在连接到回送 127.0.0.1 地址时我可以连接,但无法打印我的查询?
int portNumber = 80;
System.out.println("Started...");
String s="#";
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
) {
System.out.println("Ready...");
s=in.readLine(); /// Let's take first line only
System.out.println(s);
} catch(Exception e){
System.out.println("Error "+e);
}
我希望在输出中看到第一个查询:“GET /?Q1...”。谢谢。
【问题讨论】:
-
此代码不能接受多个查询,或打印多行。您需要从
accept()开始并以缺少的close()结束所有I/O 循环。如果您没有看到 Q1,那么您将其定向到了错误的主机。 -
我知道它不能接受多个查询。这是故意定位问题的。即:第一个连接丢失。我已将查询定向到相同的主机 - 我已经完成了大约 30 次,结果相同。你说这个代码打印你 Q1 吗?
标签: java networking io