如何在不关闭输出流的情况下告诉服务器客户端已经完成输出

how to tell server that client already finished the output without shutting down the outputstream

我有以下代码来创建到 send/receive 数据的客户端套接字:

val socket:Socket = new Socket(InetAddress.getByName("127.0.0.1"), 7777)
val inputStream = socket.getInputStream()
val bufferSource = new BufferedSource(inputStream)
val out = new PrintStream(socket.getOutputStream())

var data = "Hello Everyone"
out.println(data)
out.flush()
***socket.shutdownOutput()***
val in = bufferSource.getLines()
if (in.hasNext) {
  println(in.next())
}

如果我不运行 socket.shutdownOutput(),我就不会从服务器获取数据, 因为服务器端仍在等待输入。因此我必须关闭 outputStream。 但如果关闭输出,则无法重新打开。所以我必须创建一个新套接字来发送新数据。 这导致发送一条记录需要创建一个新的套接字。这真的很尴尬。 有没有其他方法可以告诉服务器输出已经完成,而无需关闭输出。 提前致谢!

问题是服务器不知道什么时候停止读取、处理和回复。

您在这里需要的是一个应用程序级协议,它将规定服务器和客户端如何通信——什么是命令,如何格式化响应,等等。

这可能是一个面向行的协议——每个新行代表一条消息(通常消息定界符可以是消息中未出现的任何其他字符序列)。 或者可以是定长条消息;或消息 预先加上消息长度(或类型) 让对方知道你期望多少数据。