多个ServerSockets,多个设备并发送到多个套接字

时间:2013-03-29 00:43:29

标签: java android sockets

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

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

2 个答案:

答案 0 :(得分:1)

你也可以:

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

通常至少这样做。

答案 1 :(得分:0)

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

修复每个客户端的套接字端口.Server尝试打开一个数组。

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