2013-01-11 50 views
0

我在java中編寫了一個程序來檢查瀏覽器發送給http服務器的內容。 程序注意到以下文本(我們將其命名爲TEXT_BROWSER無法獲取服務器發送給客戶端的數據在java中

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的2號線從Host: localhostHost: 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

可能重複:http://stackoverflow.com/questions/9959573/simple-java-http-client-no-server-response – Andremoniy

回答

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)每行

2)我就得flush作家每行

3)讀取服務器後,你應當使用\r\n回答後每發送一行

+0

我編輯了程序,因爲你提到,但內部循環做永遠不會結束。看上面,我已經提到了輸出。 –

相關問題