2014-03-19 74 views
1

這是我的代碼:「套接字關閉」的錯誤,當我嘗試發送/接收jxrpc通過套接字流

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, false);//suggested by fge 

Socket s = new Socket("127.0.0.1",port); 
mapper.writeValue(s.getOutputStream(),anObjectRequest);//this works 
Aresponse res = mapper.readValue(s.getInputStream(),AresponseClass.class); 

我得到關閉套接字。

但是,如果查看wireshark,我也看到服務器正確接收請求並正確發送答案! 問題在哪裏?

回答

2

http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#getOutputStream()

關閉返回的OutputStream將關閉關聯套接字

是什麼類型映射器?請問這種方法:

mapper.writeValue(s.getOutputStream(),anObjectRequest);//this works 

打電話關閉OutputStream對象?

假設你使用的是ObjectMapper

注:方法不會關閉底層流在此明確;然而,這個映射器使用的JsonFactory可能會根據它的設置選擇關閉流(默認情況下,它會在我們構造的JsonGenerator關閉時嘗試關閉它)。

您必須注意您正在使用哪個JsonFactory

+0

有人能比我更好的格式化stackoverflow修復第二個鏈接 – Colton

+0

是的,它是一個ObjectMapper(編輯的問題),但我沒有指定任何JSON工廠,當我創建它...所以如何設置這種行爲是正確的? – Phate

+1

你說得對,它默認關閉; OP應該'mapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE,false)' – fge