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

Sockets 如何在不关闭outputstream的情况下告诉服务器客户端已经完成了输出,sockets,streaming,outputstream,Sockets,Streaming,Outputstream,我使用以下代码创建客户端套接字以发送/接收数据: 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 da

我使用以下代码创建客户端套接字以发送/接收数据:

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。 但如果关闭输出,则无法重新打开。所以我必须创建一个新的套接字来发送新数据。 这导致发送一条记录需要创建一个新套接字。这真的很尴尬。 有没有其他方法可以告诉服务器输出已经完成,而不关闭输出。
提前谢谢

问题在于服务器不知道何时停止读取、处理和回复

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

这可能是一个面向行的协议-每一新行代表一条消息(通常,消息分隔符可以是消息中未出现的任何其他字符序列)。
或者它可以是固定长度的消息;或者用消息长度(或类型)预先挂起的消息,让对方知道您期望的数据量。

谢谢Nikolai,我也想到了这一点。我确实需要自己定制服务器端逻辑。