gpt4 book ai didi

java - 多个 ServerSocket、多个设备并发送到多个套接字

转载 作者:行者123 更新时间:2023-12-02 07:09:32 25 4
gpt4 key购买 nike

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

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

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

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

这意味着设备1可能有ServerSocket(1111),设备2有ServerSocket(1112),等等。

然后,每个设备通过多个端口发送消息。例如:device1 遍历数组并打开客户端套接字并为每个端口发送一条消息:套接字socket = new Socket(IP,1112);发送消息...套接字socket = new Socket(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 的错误,指出我已经绑定(bind)到该端口/IP,这是正确的。这是我不明白的地方。

最佳答案

您还可以:

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

至少通常是这样做的。

关于java - 多个 ServerSocket、多个设备并发送到多个套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15694630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com