我的公司为我们的系统创建了他们自己的定制安卓硬件。
我们目前有 2 个 android 设备需要一起通信并同步它们内部的 sqlite 数据库。
我开始编写自定义套接字协议来解决这个问题。这是基于服务器客户端模型。然而,随着我进行更多的开发,我发现每个设备都需要运行一个服务器套接字,并且可以与系统中的 3 个或更多设备进行通信,并且服务器也有可能死机、重启或崩溃。
所以我的想法是让每个设备搜索我存储在数组中的一组端口,并绑定到设备检查时当前可用的端口,并围绕它创建我的 ServerSocket。
这意味着可能 device1 具有 ServerSocket(1111) 而 device2 具有 ServerSocket(1112) 等。
然后每个设备通过多个端口发送消息。例如:device1 遍历数组并打开一个客户端套接字并为每个端口发送一条消息: Socket socket = new Socket(IP,1112); 发送消息... Socket 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 的错误,说我已经绑定到该端口/IP,这是真的。这是我不明白的。