gpt4 book ai didi

sockets - 如何告诉服务器客户端已经完成输出而不关闭输出流

转载 作者:行者123 更新时间:2023-12-03 12:04:43 37 4
gpt4 key购买 nike

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

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

最佳答案

问题是服务器不知道何时停止阅读、处理和回复。

您需要的是 应用层协议(protocol)这将决定服务器和客户端如何通信 - 什么是命令,如何格式化响应等。

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

关于sockets - 如何告诉服务器客户端已经完成输出而不关闭输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078515/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com