来自http服务器的基本PUT,GET请求

时间:2014-03-03 23:21:40

标签: java sockets http request client

我最近在学习如何创建套接字以连接到网络服务器。我已经设法用Java写了一些东西:

    BufferedReader inUser = new BufferedReader(new
    InputStreamReader(System.in));

    Socket clientSocket = new Socket("www.google.com", 80);  // url expected

    DataOutputStream outServer = new DataOutputStream
            (clientSocket.getOutputStream());
    BufferedReader inServer = new BufferedReader(new
            InputStreamReader(clientSocket.getInputStream()));

    String sentence = inUser.readLine();
    outServer.writeBytes(sentence + '\n');

    String modifiedSentence = inServer.readLine();

    System.out.println("FROM SERVER: " + modifiedSentence);

    inUser.close();
    outServer.close();
    inServer.close();
    clientSocket.close();

我也在使用socketTest程序(来自http://sockettest.sourceforge.net/)来测试我的客户端。连接似乎很好,我可以使用sockettest接收和发回消息(通过托管本地服务器)。当我尝试将一个字符串发送到一个web服务器时(在我的java代码中它被命名为'sentence'),它会像预期的那样返回对'sd'或'a'等随机输入的错误请求。但是,当我输入我希望收到反馈的查询时,我什么都收不到。可以肯定的是,这就是我输入的内容(存储在“句子”中):

GET index.html http/1.0

如果文件存在,我应该获取文件,如果出现问题,我应该获取异常,对吗?我没有收到任何东西。更奇怪的是,我注意到我第一次提供输入时,我只需要确保我有3个单独的随机字符串(用空格分隔)以使其被接受为有效输入。我之后输入的任何随机输入,如'sd'也将被接受。

我做的另一个观察是程序继续运行。通常我应该读一行然后程序停止。这意味着它无法读取任何内容。

我正在尝试使用端口80来访问所有页面。这是我尝试执行查询的一小部分网站:   - www.google.com   - en.wikipedia.org   - www.cracked.com

我为了教程的唯一目的尝试了其他一些设置。我为什么不收到任何东西?当我尝试使用telnet时,似乎有些工作(尽管www.google.com总是返回xxx错误)。

1 个答案:

答案 0 :(得分:2)

在刷新输出流之前尝试编写一个额外的“\ r \ n”:

BufferedReader inUser = new BufferedReader(new InputStreamReader(System.in));
URL url = new URL("http://www.google.com");
Socket clientSocket = new Socket(url.getHost(), 80);  // url expected
OutputStream output = clientSocket.getOutputStream();
PrintWriter pw = new PrintWriter(output,false);
pw.print("GET index.html HTTP/1.0\r\n");
pw.print("\r\n");
pw.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

String modifiedSentence = input.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);