为什么我的插座什么都不做?

时间:2017-05-12 20:56:31

标签: java sockets

我有一个名为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,"我认为这是一个原始套接字,请纠正我,如果我错了)

1 个答案:

答案 0 :(得分:4)

HTTP GET行必须以换行符终止, 然后你需要一个空行来标记请求标题的结尾。 在此之前,服务器一直在等待您完成请求。

更改此行:

out.write("GET / HTTP/1.0");

对此:

out.write("GET / HTTP/1.0\n\n");