无法在java中获取服务器发送给客户端的数据

时间:2013-01-11 17:36:57

标签: java http client port

我在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: localhost更改为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:
<

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

1 个答案:

答案 0 :(得分: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);
    }

你会看到结果。

失败的主要原因是三件事:

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

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

3)在每个发送的行之后读取服务器应答