我有一个名为JSocket的课程,我正在为我的朋友制作(因为他对插座很糟糕,所以我试图让他更容易)。当我调用connect()
方法时,它完成得相当快,但在调用getOutput()
方法后,它失败了。这是我的套接字类:
public class JSocket {
public static String conn, tempLine;
public static int port;
public static boolean isURL = false;
public Socket socket;
BufferedReader in;
PrintWriter out;
public JSocket(String conn, int port) {
this.conn = conn;
this.port = port;
try {
socket = new Socket(conn, port);
} catch (IOException e) {
e.printStackTrace();
}
}
public JSocket connect() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
out.write("GET / HTTP/1.0");
out.flush();
} catch(IOException e) {
e.printStackTrace();
}
return this;
}
public String getOutput() {
String line;
String output = "";
try {
while ((line = in.readLine()) != null) {
output += line;
}
} catch(IOException e) {
e.printStackTrace();
line = "err";
}
return output;
}
}
我的主要人物:
public class Main {
public static void main(String[] args) {
JSocket js = new JSocket("google.com", 80);
js.connect();
System.out.println("Connected");
System.out.println("Conn: " + js.getOutput());
return;
}
}
打印"已连接,"然后一段时间后它印刷了#Con; Conn:"没有别的。我试图获取谷歌网页的来源,我不想变得愚蠢,我觉得我做了一些愚蠢的回答。有人可以帮忙吗? (另外,我添加了标签" raw-socket,"我认为这是一个原始套接字,请纠正我,如果我错了)
答案 0 :(得分:4)
HTTP GET
行必须以换行符终止,
然后你需要一个空行来标记请求标题的结尾。
在此之前,服务器一直在等待您完成请求。
更改此行:
out.write("GET / HTTP/1.0");
对此:
out.write("GET / HTTP/1.0\n\n");