【问题标题】:Multiple ServerSockets, multiple devices and sending to multiple sockets多个 ServerSockets、多个设备并发送到多个套接字
【发布时间】:2013-03-29 00:43:28
【问题描述】:

我的公司为我们的系统创建了他们自己的定制安卓硬件。

我们目前有 2 台 android 设备需要一起通信并同步其中的 sqlite 数据库。

我开始编写自定义套接字协议来解决这个问题。这是基于服务器客户端模型。然而,随着我进行更多开发,我发现每个设备都需要运行一个服务器套接字,并且可以与系统中的 3 个或更多设备进行通信,并且服务器可能会死机、重启或崩溃。

所以我的想法是让每个设备搜索我存储在数组中的一组端口,并绑定到设备检查时当前可用的端口并围绕该端口创建我的 ServerSocket。

这意味着可能 device1 有 ServerSocket(1111),而 device2 有 ServerSocket(1112),等等。

然后每个设备通过多个端口发送消息。 例如:device1 遍历数组并打开一个客户端套接字并为每个端口发送一条消息: 套接字套接字 = 新套接字(IP,1112); 发消息... 套接字套接字 = 新套接字(IP,1113); 发消息... 等等

当然,我已经创建了这个多线程(由 android 服务运行),因此不会阻塞 android 设备中的 UI 线程。

我的问题是,我这样做对吗?还是在 Java 中有更好的方法来做到这一点?

编辑:

我决定添加一些代码来解释我的问题。

我有多个通过 TCP/IP 连接在一起的 android 设备,我在每个设备上创建一个 ServerSocket,如下所示:

ServerSocket serverSocket = new ServerSocket(4000);

现在,当第二个设备尝试此操作时,它会在 Java 中给我一个错误,因为该套接字正在被另一个设备使用。他们的 IP 地址类似于 172.23.3.128 和 172.23.3.127。

所以即使有不同的 IP 地址,我也会收到来自 Java 的错误,说我已经绑定到该端口/IP,这是真的。这是我不明白的。

【问题讨论】:

    标签: java android sockets


    【解决方案1】:

    你也可以:

    • 让客户端监听特定的 UDP 端口
    • 让客户也broadcast 到该端口,宣布他们的存在
    • 一旦客户端收到广播,他们就可以通过 TCP 或 UDP 发起从临时端口到预先确定的辅助端口的直接连接。

    至少通常是这样的。

    【讨论】:

    • 这里的问题是每个客户端都需要充当服务器。基本上每个设备都打开一个 ServerSocket,每个设备将信息发送到不同的端口。使用 UDP,我们仍然处于 1 个服务器、多个客户端的模型。
    • @Juan,也许你误会了。所有客户都做同样的事情;没有“服务器”。所有客户端都广播他们的存在并收听其他人的广播。
    • 我相信你是对的。但是,这不起作用。当我在 java 中的特定端口注册一个 ServerSocket 时,我无法再次从另一个设备向它注册,我只能从我的客户端向该端口发送一条消息。我将添加一些代码。
    • 好的,所以我知道我的断开连接在哪里。在使这项工作感到困惑时,我试图在同一设备上打开相同的端口(我为每个设备使用一个终端,并且我对其他设备进行了 telnet),那是星期五晚上。我今天早上来了,又看了一遍这个问题,我明白了。谢谢!
    • 我知道这种感觉 :-) 太好了,很乐意提供帮助。
    【解决方案2】:

    这没有意义。每个设备都必须有自己的 IP 地址:它们也不需要不同的端口号。它们都可以使用相同的端口号。

    【讨论】:

      【解决方案3】:

      基本上服务器需要正常运行,你的想法是服务器中断。否则,您可以使用单个服务器接受来自多个客户端的连接,每个客户端在一个端口中,例如:5000,5001,5002 等。

      修复每个客户端的套接字端口。服务器按照您的尝试打开一个数组。

      通过多个端口发送消息是什么意思?为每个客户端使用一个端口,否则您无法识别哪个客户端正在发送消息。

      【讨论】:

      • 基本上每个客户端也需要打开serverSocket。我确实像你说的那样创建了数组,它似乎工作正常。我只是想知道这是否是正确的方向。
      猜你喜欢
      • 2016-09-12
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2011-10-30
      • 1970-01-01
      • 2015-03-09
      相关资源
      最近更新 更多