nio测试接收一部分数据

一种方式是写入比MTU大的数据
一种是通过charles限制MTU大小

fun main(args: Array<String>) {
    val serverSocketChannel = ServerSocketChannel.open()
    serverSocketChannel.configureBlocking(false)
    serverSocketChannel.socket().bind(InetSocketAddress(8080), 1024)
    val selector = Selector.open()
    serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT)

    while(true){
        selector.select()
        val iterator = selector.selectedKeys().iterator()

        while (iterator.hasNext()) {
            val key = iterator.next()
            //必须remove 坑1
            iterator.remove()
            if (key.isAcceptable){
                val scc = key.channel() as ServerSocketChannel
                val socketChannel = scc.accept()
                socketChannel.configureBlocking(false)
                socketChannel.register(selector, SelectionKey.OP_READ)
            }

            if (key.isReadable) {
                println("--------------------------")
                val socketChannel = key.channel() as SocketChannel
                val buffer = ByteBuffer.allocate(1024)
                val length = socketChannel.read(buffer)
                if (length > 0) {
                    buffer.flip()
                    val byteArray = ByteArray(length)
                    while (buffer.hasRemaining()) {
                        buffer.get(byteArray)
                    }
                    println(String(byteArray))
                }

                //必须处理客户端关闭,否则会一直可读  坑2
                if (length < 0){
                    key.cancel()
                    socketChannel.close()
                }

                if (length == 0) {
                    //不处理
                }
            }
        }
    }
}

结果

--------------------------
GET /favicon.ico HTTP/1.1
Host: 10.0.96.147:808
--------------------------
0
User-Agent: Mozilla/5.0 (Linux; U; Android 8.
--------------------------
1.0; zh-cn; MI 8 Build/OPM1.171019.026) AppleWeb
--------------------------
Kit/537.36 (KHTML, like Gecko) Version/4.0 Chrom
--------------------------
e/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.3.0
Accept: image/webp,image/apng,im
--------------------------
age/*,*/*;q=0.8
Referer: http://10.0.96.147:808
--------------------------
0/
Accept-Encoding: gzip, deflate
Accept-Langu
--------------------------
age: zh-CN,en-US;q=0.8
Connection: keep-alive

--------------------------

发布了44 篇原创文章 · 获赞 13 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_19457117/article/details/84064910