java.net.SocketException: recvfrom failed: EBADF 异常的处理

写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的链接通道关闭了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值