0

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

我们目前有 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,这是真的。这是我不明白的。

4

3 回答 3

1

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

于 2013-03-29T02:49:53.737 回答
1

您还可以:

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

至少通常是这样做的。

于 2013-03-29T02:54:59.730 回答
0

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

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

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

于 2013-03-29T02:40:53.713 回答