繁体   English   中英

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

[英]Multiple ServerSockets, multiple devices and sending to multiple sockets

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

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

我开始编写自定义套接字协议来解决这个问题。 这基于服务器客户端模型。 然而,当我进行更多开发时,我发现每个设备都需要运行服务器套接字,并且可以在系统中传送3个或更多设备,并且服务器可能会死或重启或崩溃。

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

这意味着可能device1具有ServerSocket(1111)并且device2具有ServerSocket(1112)等。

然后,每个设备通过多个端口发送消息。 例如:device1遍历数组并打开客户端套接字并为每个端口发送消息:Socket socket = new Socket(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,这是真的。 这是我不明白的。

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

你也可以:

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

这通常至少是这样做的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM