我在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:
<
我注意到内循环永远不会在这里结束 现在可能是什么原因?
答案 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)在每个发送的行之后读取服务器应答