Java(Kotlin)套接字服务器。不断地读

Java(Kotlin)套接字服务器。不断地读,java,sockets,server,kotlin,Java,Sockets,Server,Kotlin,我的服务器读数如下所示: private fun init() { val inStream = BufferedInputStream(socket.getInputStream()) val bytes = ByteArray(bufferSize) outStream = DataOutputStream(socket.getOutputStream()) while (true) { val c

我的服务器读数如下所示:

private fun init() {
        val inStream = BufferedInputStream(socket.getInputStream())
        val bytes = ByteArray(bufferSize)

        outStream = DataOutputStream(socket.getOutputStream())


        while (true) {
            val count = inStream.read(bytes, 0, bufferSize)

            if (count >= 0) {
                server.onReceive(this, bytes, count)
            }

        }
    }
第一次读取等待,直到收到字节。但第二个不能等。循环将永远运行,计数为-1。我只想在收到字节时读取它们

循环将永远运行

你们在溪流的尽头循环。如果
count
为-1,则应关闭套接字并退出循环

计数是-1

这正是我的观点

循环将永远运行

你们在溪流的尽头循环。如果
count
为-1,则应关闭套接字并退出循环

计数是-1


这正是我的观点。

在循环之前声明
var count
,只重新分配其中的值?@Pawel为什么?这会有什么区别?在循环之前声明
var count
,只重新分配其中的值?@Pawel为什么?这会有什么不同?假设我的客户发送了消息。服务器打开连接,关闭连接。客户端再次发送。服务器是否再次打开和关闭?最好的方法是什么?客户端将发送许多消息。每次服务器都应该打开和关闭连接?这是一个新问题,它与这个答案没有任何关系,但最好让服务器循环读取和响应请求,直到客户端关闭连接。然后,客户机可以决定是为每个请求使用一个持久连接还是一个新连接。持久性更好,但另一方面,客户端不应该占用空闲连接很长时间。服务器打开连接,关闭连接。客户端再次发送。服务器是否再次打开和关闭?最好的方法是什么?客户端将发送许多消息。每次服务器都应该打开和关闭连接?这是一个新问题,它与这个答案没有任何关系,但最好让服务器循环读取和响应请求,直到客户端关闭连接。然后,客户机可以决定是为每个请求使用一个持久连接还是一个新连接。持久性更好,但另一方面,客户端不应该占用空闲连接很长时间。