2014-03-06 167 views
0

我是計算機網絡新手,我有關於創建java http客戶端示例的練習。Java http請求客戶端示例

的運動指導:

Socket soc = new Socket(host, port); 

DataInputStream in = new DataInputStream(soc.getInputStream()); 
BufferedWriter out= new BufferedWriter(new 
OutputStreamWriter(soc.getOutputStream())); 

out.write(httpRequest); 
out.flush(); 

String httpResponse= in.readUTF(); 

,這是我的代碼:

import java.io.BufferedWriter; 
import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 


public class MyTest{ 
    public static void main(String[] args) throws UnknownHostException, IOException{ 

     String host = "gg.gg"; 
     String httpRequest = "GET/HTTP/1.1 Host:gg.gg "; 
     int port = 80; 

     Socket soc = new Socket(host, port); 


     DataInputStream in = new DataInputStream(soc.getInputStream()); 
     BufferedWriter out= new BufferedWriter(new 
     OutputStreamWriter(soc.getOutputStream())); 


     out.write(httpRequest); 
     out.flush(); 


     String httpResponse = in.readUTF(); 

     System.out.println(httpResponse); 
     //soc.close(); 
    } 
} 

但是當我運行程序,它運行很長一段時間,我發現,是的readUTF()方法。 它運行20s左右再顯示此消息: Debug detail

請問我的請求「GET/HTTP/1.1主機:gg.gg」不正確,或任何其他的錯誤嗎? 我想使用說明表單,而不是另一種解決方案。謝謝! (我的英語不太好)

回答

0
  • HTTP'行尾標記'是CR LF或\r\n
  • 的 '簡單請求' 的格式是Simple-Request = "GET" SP Request-URI CRLF

你應該這樣做:

String httpRequest = "GET /\r\n"; 

此外,in.readUTF()使用 '修訂的UTF-8' 是不是你想要的,因爲它預計,字符串的大小將被指定爲前2個字節。

雖然不是高效,這個工程:

int read; 

while ((read = in.read()) != -1) 
{ 
    System.out.print((char) read); 
} 

(這忽視了響應實際上是,卻偏偏要回來爲UTF-8編碼,這對與(char)鑄造完美的罰款。正確的編碼處理超出了這個答案的範圍。)