【问题标题】:Writting a Java server with multiple UDP connections for each client为每个客户端编写具有多个 UDP 连接的 Java 服务器
【发布时间】:2019-02-14 16:57:48
【问题描述】:

首先我要介绍一下情况:我创建了一个在两个 Android 设备之间发送视频和音频的应用程序(客户端和服务器之间的直接连接)。现在我想更进一步,使用在计算机中运行的专用 Java 服务器;该服务器必须桥接这些客户端和服务器应用程序之间的流量。例如,首先两个android应用程序都会连接到计算机服务器,然后将从第一台设备获取的所有视频数据发送到服务器,然后发送到第二台设备。

快速的答案可能是:在服务器内部,为每个现有的套接字创建两个套接字,然后使用它们来桥接数据。 问题是我有 5 个 UDP 套接字:客户端的音频 Tx 和 Rx、视频 Tx 和 Rx 和 Orders Tx,以及服务器端的音频 Tx 和 Rx、视频 Tx 和 Rx 和 Orders Rx,我还有一个TCP Socket 来管理通信。

所以此时我唯一的选择是:

客户端APP-----------计算机服务器-------------服务器APP

音频发送 --------------> 音频接收 |音频发送 -------------> 音频接收

音频接收

视频发送 --------------> 视频接收 |视频发送 ------------> 视频接收

视频接收

订单发送 ----------> 订单接收 |订单 Tx -----------------------> 订单 Rx

TCP TCP | TCP TCP

管理/编码/维护绝对是地狱。

第二种选择是使用NIO,但是在发送大量数据时不推荐使用。

这是最好的方法吗?如果没有,有什么办法可以减少服务器中 UDP 套接字的数量,因为它们只会在两个设备之间桥接数据?

感谢您的宝贵时间!

【问题讨论】:

  • 首先:我对UDP一无所知。但是在第一行看到Computer server 的是-->Audio Rx | Audio Tx -->。那是对的吗?我会认为更像“-->Audio Tx | Audio Tx -->”。我想没有计算机服务器的连接将是“Audio Tx --> Audio Tx”?
  • 所以 T 是发送器/发送器,R 是接收器?
  • 但是您的计算机服务器中需要那么多不同的 R/T 套接字吗?中继音频与视频或命令不同吗?服务器除了转发传入的数据包外别无他法。所以在我看来,你只需要编写一个 RTmodule。然后为您的 5 个流实例化 5 次。
  • 这是选项之一,当然我可以创建一个 UDPDataBridge 类,该类运行一个包含两个 UDP 套接字的线程,一个用于 Rx,另一个用于 Tx,然后使用此类的多个实例来执行技巧,但我想知道比这更简单的东西,因为唯一的任务是重新发送数据包。到目前为止,我会坚持这个想法,谢谢!

标签: java android sockets udp


【解决方案1】:

但是您的计算机服务器中是否需要那么多不同的 R/T 套接字?中继音频与视频或命令不同吗?服务器除了转发传入的数据包外别无他法。所以在我看来,你只需要编写一个 RTmodule。然后为您的 5 个流实例化 5 次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2012-07-22
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多