Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单个套接字上的多个对象流_Java_Sockets_Networking - Fatal编程技术网

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

Java 单个套接字上的多个对象流,java,sockets,networking,Java,Sockets,Networking,我正在编写一个程序,它需要像图像这样的大数据(最终可能是音频流或其他东西,尽管这不是一个立即的目标),以及发送主机->客户端的小指令。目前,我可以编写一个简单的TCP客户机-服务器应用程序。然而,这确实意味着,无论何时发送图像,都不会传输其他数据,包括可以非常快速地发送的相当重要的小指令。我可以通过在服务器和每个客户机之间创建多个套接字来解决这个问题,但我更愿意将事情保留在一个套接字上(因此使用一个端口)。是否有一个协议或某种东西,我可以用来并发发送多个数据流(或者至少以某种方式相互交织?)?任

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

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

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

编辑:另一种方法是构建数据框架。发送一个数据开始命令,然后发送1024字节的数据,然后发送任何其他命令,然后发送一个数据继续命令,然后发送下一个1024字节,然后发送一个数据结束命令(数据开始/继续/结束当然是您发明的某些协议中的组成命令)


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

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

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

编辑:另一种方法是构建数据框架。发送一个数据开始命令,然后发送1024字节的数据,然后发送任何其他命令,然后发送一个数据继续命令,然后发送下一个1024字节,然后发送一个数据结束命令(数据开始/继续/结束当然是您发明的某些协议中的组成命令)


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

这看起来与您的类似。使用额外的套接字将立即起作用。编写您自己的交错协议是一个主要的风险和时间成本。用简单的方法来做。这看起来和你的类似。使用额外的插座会立即起作用。编写您自己的交错协议是一个主要的风险和时间成本。用简单的方法做。