0

我用java编写了一个程序来检查浏览器发送到http服务器的内容。该程序注意到以下文本(命名它TEXT_BROWSER

GET / HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

现在我制作了另一个程序,它将发送"TEXT_BROWSER"到任何网站(谷歌,我的路由器(192.168.1.1))但我没有得到响应(没有来自服务器的文本)我想知道我的程序中的错误是什么。

我的java程序

//1streqbybrowser.txt contains TEXT_BROWSER<br/>
import java.net.*;
import java.io.*;
class TCPClient 
{
 public static void main(String argv[]) throws Exception
 {
  String sentence;
  File f=new File("1streqbybrowser.txt");
  FileReader fr=new FileReader(f);
  BufferedReader br=new BufferedReader(fr);  
  Socket clientSocket = new Socket("192.168.1.1", 80);
  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  while((sentence = br.readLine())!=null)
   outToServer.writeBytes(sentence+"\n");
  System.out.println("Sending finished");
  while((sentence = inFromServer.readLine())!=null)
    System.out.println(sentence);
  clientSocket.close();
 }
}

编辑

我将 TEXT_BROWSER 的第二行从Host: localhostto更改Host: 192.168.1.10为发送到我的路由器(192.168.1.1),仍然没有得到任何响应
再次编辑
我做了@andremoniy 提到的更改,但只有 TEXT_BROWSER 的 ast 行被发送到服务器并收到了一些东西,第二个循环没有结束

>GET / HTTP/1.1
< HTTP/1.1 400 Bad Request
< Content-Length: 0
< Server: RomPager/4.07 UPnP/1.0
< EXT:
<

我注意到内部循环永远不会在这里结束。
现在可能是什么原因?

4

1 回答 1

0

在循环的一部分中修改您的程序,while如下所示:

    while ((sentence = br.readLine()) != null) {
        outToServer.writeBytes(sentence + "\r\n\r\n");
        outToServer.flush();
        System.out.println(">" + sentence);
        while ((sentence = inFromServer.readLine()) != null)
            System.out.println("< " + sentence);
    }

你会看到结果。

你失败的主要原因是3件事:

1)你应该\r\n在每一行之后使用

2)我你必须flush在每一行之后写

3)在每行发送后读取服务器答案

于 2013-01-11T18:07:55.930 回答