我正在尝试显示无法从服务器找到404页面
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ex1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final int BUFFER_SIZE=1000;
char[] buffer=new char[BUFFER_SIZE];
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(16000);
} catch (IOException e) {
System.out.println("Could not listen on port: 16000");
System.exit(-1);
}
while (true) {
Socket clientSocket = null;
try {
System.out.println("Waiting for Connection");
clientSocket = serverSocket.accept();
System.out.println("Connection Accepted");
DataOutputStream output =new DataOutputStream(clientSocket.getOutputStream());
output.writeBytes("HTTP/1.1 404 Not Found \r\n");
output.writeBytes("Content-Type: text/html \r\n\r\n");
output.flush();
} catch (IOException e) {
System.out.println("Failed to accept connection");
System.exit(-1);
}
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
in.read(buffer);
System.out.println(buffer);
in.close();
clientSocket.close();
System.out.println("Connection terminated");
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Problem in communicating with the client"); }
}
}
}
问题是当我在我的浏览器中输入localhost:16000(谷歌浏览器)时,我得到“哎呀!这个链接似乎已经破了。” 不是第404页
输出是:
Waiting for Connection
Connection Accepted
java.net.SocketException: Connection reset
Problem in communicating with the client
Waiting for Connection
Connection Accepted
GET / HTTP/1.1
Host: localhost:16000
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Connection terminated
Waiting for Connection
Failed to accept connection
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.read1(BufferedReader.java:205)
at java.io.BufferedReader.read(BufferedReader.java:279)
at java.io.Reader.read(Reader.java:140)
at ex1_Getting_your_hands_dirty.ex1.main(ex1.java:55)
如何解决这个问题?
答案 0 :(得分:2)
我认为您的HTTP响应无效。
HTTP/1.x 404 Not Found
你应该:
1.x
更改为正确的版本号,例如1.0
Content-Length
和Content-Type
更像是......
HTTP/1.1 404 Not Found
Content-Length: 9
Content-Type: text/plain
Not Found