这是我的代码:
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,我看到服务器正确接收请求并正确发送答案! 问题在哪里?
答案 0 :(得分:2)
http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#getOutputStream()
关闭返回的OutputStream将关闭相关的套接字
映射器是什么类型的?这种方法是这样的:
mapper.writeValue(s.getOutputStream(),anObjectRequest);//this works
在OutputStream
对象上调用close?
假设您使用的是ObjectMapper
:
注意:方法不会在此显式关闭基础流;但是,这个映射器使用的JsonFactory可能会根据其设置选择关闭流(默认情况下,当我们构造的JsonGenerator关闭时,它会尝试关闭它)。
您必须注意您正在使用的JsonFactory
。