2013-04-24 61 views
0

我有通過HTTP到服務的套接字連接。該服務僅支持在發送響應時默認關閉連接的HTTP/1.0。有一個參數添加到此版本的協議 - 連接:保持活着 - 使其成爲可能。該標準定義服務應該將該參數附加到標題。這不會發生響應標題不包含它。Java重用套接字

當我從套接字獲取inputStream時,它不支持標記。那麼,我可以安全地假設我將無法重複使用相同的連接來發送/接收多個請求/響應?

更新 我無法控制服務,我手動構建請求。

Socket socket = new Socket("server.com", 11111); 

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")); 

writer.write("POST HTTP/1.0\r\n"); 
writer.write("Host: " + socket.getInetAddress().getHostName() + "\r\n"); 
writer.write("Content-Length: " + length + "\r\n"); 
writer.write("Content-Type: text/xml; charset=\"utf-8\"\r\n"); 
writer.write("Connection: Keep-alive\r\n"); 
writer.write("\r\n"); 

writer.write(xmldata); 
writer.flush(); 

List<String> lines = IOUtils.readLines(socket.getInputStream()); 
+0

你能告訴我們一些代碼嗎?你使用一些庫來建立你的http請求嗎? – Fildor 2013-04-24 08:24:34

+0

你控制什麼?客戶端還是服務器或兩者?如果你對服務器沒有影響,並且它關閉了連接,那麼你就無能爲力,只需要創建新的套接字。 – JIV 2013-04-24 08:26:58

回答

1

HTTP 1.0標準(RFC 1945)實際上沒有定義任何這樣的東西。這是一項後添加功能,服務器不一定要支持它。

+0

@locke EJP寫道,你必須處理不支持這個特性的服務器。但是除此之外,無論如何,在任何時候你都應該已經發現了socket關閉的可能性。你同意嗎,EJP? – Fildor 2013-04-24 09:12:13

+0

@Fildor當然。服務器可以隨時關閉連接,即使在HTTP 1.1中也是如此。如果它拒絕與'Connection:Keep-alive'合作,同上。 – EJP 2013-04-24 10:17:01