duplex read error,thread is dead with exception:java.net.SocketException: Connection reset

使用OkSocket自定义head出现这个问题,各位大神麻烦看看,谢谢!!!

I/System.out: OkSocket, Thread name:main id:2

I/System.out: OkSocket, mActionHandler is attached.

I/System.out: OkSocket, ReconnectionManager is attached.

I/System.out: OkSocket, Start connect: 192.168.123.198:2346 socket server...

I/System.out: OkSocket, DUPLEX is processing

I/System.out: OkSocket, client_duplex_write_thread is starting

I/System.out: OkSocket, client_duplex_read_thread is starting

I/System.out: OkSocket, Socket server: 192.168.123.198:2346 connect successful!

I/System.out: OkSocket, write bytes: 55 55 00 01 00 05 31 32 33 30 0d

I/System.out: OkSocket, bytes write length:11

W/System.err: OkSocket, duplex read error,thread is dead with exception:java.net.SocketException: Connection reset

I/System.out: OkSocket, client_duplex_read_thread is shutting down


import com.xuhao.didi.core.protocol.IReaderProtocol
import java.nio.ByteBuffer
import java.nio.ByteOrder

class CustomReaderProtocol : IReaderProtocol {
override fun getHeaderLength(): Int {
return 6
}

override fun getBodyLength(header: ByteArray?, byteOrder: ByteOrder?): Int {
if (header == null || header.size < headerLength) {
    return 0
}
val bb = ByteBuffer.wrap(header)
bb.order(byteOrder)
return bb.int
}
}


val body = str.toByteArray(Charset.defaultCharset())
    val bb = ByteBuffer.allocate(8 + body.size)
    bb.order(ByteOrder.BIG_ENDIAN)
    bb.put(HexUtil.hexToByte("55"))
    bb.put(HexUtil.hexToByte("55"))
    bb.put(HexUtil.hexToByte("00"))
    bb.put(HexUtil.hexToByte("01"))
    val sizeHex = HexUtil.intToHex(body.size + 2)
    if (sizeHex.length == 4) {
        bb.put(HexUtil.hexToByte(sizeHex.substring(2)))
        bb.put(HexUtil.hexToByte(sizeHex.substring(0, 2)))
    } else {
        bb.put(HexUtil.hexToByte(sizeHex))
    }
    if (sizeHex.length == 2) {
        bb.put(HexUtil.hexToByte("00"))
    }
    bb.put(body)
    bb.put(HexUtil.hexToByte("30"))
    bb.put(HexUtil.hexToByte("0d"))
//结果55 55 00 01 00 05 31 32 33 30 0d
    return bb.array()
2019-12-13 21:01 添加评论 分享
已邀请:

最佳回复

1

wellchang - 让一切随风

赞同来自: ask

自己找到原因了,getBodyLength的含义理解错了,需要从自定义header中取出body长度

要回复问题请先登录注册

退出全屏模式 全屏模式 回复