单个套接字上的多个对象流

时间:2012-06-26 00:56:34

标签: java sockets networking

我正在编写一个程序,需要像图像这样的大数据(最终可能是音频流或其他东西,虽然这不是一个直接目标),以及要发送主机的小指令 - >客户。目前,我可以将其写为普通的TCP客户端 - 服务器应用程序。然而,这确实意味着无论何时发送图像,都不会传输其他数据,包括可以非常快速地发送的相当重要的小指令。我可以通过在服务器和每个客户端之间创建多个套接字来解决这个问题,但我真的宁愿将事情保存到一个套接字(因此使用一个端口)。是否有协议或其他东西我可以用来同时发送多个数据流(或者至少以某种方式交织在一起?)?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

编辑:另一种方法是构建数据框架。发送一个DATA START命令,然后发送1024字节的数据,然后发送任何其他命令,然后是DATA CONTINUE命令,然后是接下来的1024字节,然后在完成后发送DATA END命令(DATA START / CONTINUE / END当然是在你发明的某些协议中编写了命令。)

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

相关问题