写Socket通信时,socket对服务端发送数据是正常的,但是在获取输入流的地方报了上面的错误。
DataOutputStream dataOutputStream = new DataOutputStream(os);
socketOutputStream(dataOutputStream, socketHeader);
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.flush();
dataOutputStream.close();
final byte[] b = new byte[1024 * 4];
int i = 0;
if (!socket.isClosed()&&(i = dataInputStream.read(b)) != -1) {//此处报错了
SocketHeader socketHeader1 = null;
try {
socketHeader1 = getDecode(b);
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("socketHeartBeatReceiver", socketHeader1.toString());
String jasonString = socketHeader1.getBody();
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(jasonString);
} catch (JSONException e) {
e.printStackTrace();
}
/*if (jsonObject.optString(RESULTCODE).equals("0")||jsonObject.optString(ERRMSG).contains("成功")){
return true;
}*/
}
后面查网上别人的解决方式发现似乎跟流有关系,于是抱着试一试的态度屏蔽掉:
dataOutputStream.close();
这句话就可以了。
注意:Socket通道就是靠流来维持的,如果流被关闭了,就相当于把socket的链接通道关闭了。