gpt4 book ai didi

java - 来自一个套接字的多个 io 流

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:06 26 4
gpt4 key购买 nike

我可以并行连接许多独立的服务器套接字和客户端套接字的 I/O 流,以便每对 I/O 流可以同时发送不同的数据吗?

如何在不增加服务器和客户端之间套接字数量的情况下在 java 中实现这样的连接?

最佳答案

始终有一个输入流和一个输出流,因此您无法添加更多流。

但是,正如sje397所评论的,您可以使用相同的流来发送“不同”的数据,您只需要想出一种方法来区分接收端的 channel ,以便它可以正确地重建数据。这是一个协议(protocol)设计问题。

编辑:在您的示例中,您可以有一个带有 header 的数据包结构,该 header 告诉数据包的类型(或 channel )、数据的长度以及文件数据包的一些附加信息(如果需要)。假设长度字段是单个字节,因此最大数据包大小(对于字符串数据包)将为 1 + 1 + 255 = 257 字节

当服务器读取字节时,它将检查第一个字节的数据包类型。确定是String包后,会读取长度,然后读取payload。然后这个过程会重复进行。

对于文件数据,很可能需要附加 header 信息,否则非字符串数据包将只是一堆字节。

这意味着您的协议(protocol)将成为基于数据包的,因此您必须一次写入一个数据包。假设数据包的最大大小为 64K,则您可以通过以下方式发送数据(想象它是一个网络管道):

客户端 -> 257(S) -> 64K(D) -> 257(S) -> 64K(D) -> 257(S) -> 服务器允许您在单个网络连接中交错两种不同类型的数据。

关于java - 来自一个套接字的多个 io 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283764/

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