2

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

4

1 回答 1

0

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

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

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

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

于 2012-06-26T03:15:23.597 回答