我正在编写一个程序,该程序需要大量数据,例如图像(最终可能是音频流或其他内容,尽管这不是近期目标),以及要发送给主机->客户端的小指令。目前,我可以将其编写为普通的TCP客户端-服务器应用程序。但是,这确实意味着每当发送图像时,就不会再传输其他数据,包括相当重要的小指令,这些指令可以很快地发送出去。我可以通过在服务器和每个客户端之间创建多个套接字来解决此问题,但是我确实更希望将内容保留在一个套接字中(因此要使用一个端口)。是否存在可以同时发送多个数据流(或至少以某种方式交织在一起)的协议(protocol)或某种东西?任何建议,将不胜感激。

最佳答案

我强烈建议您将两者分开,这是许多其他协议(protocol)(例如FTP)使用的一种做法。

如果您真的想将它们组合在一起,则可以,但是我不知道有任何标准工具可以将它们组合在一起。请记住,您将需要某种方式在客户端知道哪个字节来自哪个流。您可能需要发明某种转义序列来发送数据流,以向客户端指示控制指令即将到来。当然,该转义序列可能会自然出现在您的数据中,因此您也需要对数据进行适当的编码。

编辑:另一种方法是构筑您的数据。完成后,先发送DATA START命令,然后发送1024字节的数据,然后发送所有其他命令,再发送DATA CONTINUE命令,再发送下一个1024字节,再发送DATA END命令(当然,发送DATA START/CONTINUE/END由您发明的某种协议(protocol)组成命令)。

如果您有时间并且对学习感兴趣,这将是一个有趣的问题,但是如果您有任何急事,这将是比使用多个套接字更慢的方法。您始终可以先将控制消息发送给客户端,然后让客户端打开与服务器的数据连接。这样一来,您只需在客户端打开一个端口,在服务器端打开一个端口,通常可以简化防火墙问题。

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

10-10 05:58