【发布时间】: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,这是真的。这是我不明白的。
【问题讨论】: