android 应用程序 (java) 与 windows 应用程序 (vb.net) 通过网络服务进行通信

communication between android app (java) with windows app (vb.net) by web service

我有应用程序 Android 通过将 Android 应用程序与 Windows 应用程序 (vb.net) 连接来控制计算机(重启、关机...)网络服务 我不知道从哪里开始以及如何联系任何对此主题有任何想法的人?

既然这是一个宽泛的问题,你问的是想法,让我谈谈一些想法。

从哪里开始?为双方都理解的 Web 服务定义一个协议。例如,定义一个 URI,android 客户端可以向其推送消息(使用 PUT 或 POST)并且 vb.net 客户端可以轮询更新(使用 GET)。因为我们在这里使用一个 URI,所以发送到 URI 的负载必须定义要做什么。例如,android 客户端可以 post 消息 '{command:restart}" 然后 vb.net 客户端应该知道如果收到消息他必须重新启动机器。

这里有一些注意事项。首先 vb.net 客户端需要轮询 URI 以获取命令。所以在发送命令和执行命令之间有一些延迟。更好的是,现在您甚至不知道命令是否已执行。此外,由于没有身份验证,每个人都可以向 Web 服务发出命令。听起来很有趣。至少对于其他方。最后,如果命令已执行或更新,您需要从 URI 中清除该命令。否则,在此示例中,机器将进入重启循环。

因此,第一个问题可以通过额外的 URI 来解决,其中 android 客户端可以轮询 vb.net 客户端提供的系统状态之王。例如,vb.net 客户端可能会在重新启动之前向 URI 发送消息“{state:restarting}”。当然,每次发生某些事件时,vb.net 客户端都需要更新该 URI。安全问题?安全很难。您可能想要创建证书并签署发送给服务器的请求。然后服务器可以检查是否真的是你发送了这个请求。或者有你的证书的人,重播请求或找到某种方法来破坏整个东西。所以你可能还想使用 TLS with some king of certificate pinning. You might already know this but I'm going to repeat it anyway: do not send credentials over an insecure network. Also base64 (used in basic authentication) 不是某种加密。最后一个问题可以通过可以包含在命令中的随机数来解决。或者 vb.net 客户端在收到命令时从 URI 中清除命令(使用 DELETE)。它应该更新状态 URI,以便 android 客户端不会再次发送请求。

或者您使用 Web Sockets 等技术放弃整个 Web 服务内容。然后 android 客户端可以向套接字发送命令。服务器接收命令并将其发送到 vb.net 套接字。当 vb.net 套接字收到命令时,它会向服务器发送某种送达回执并执行命令。服务器收到回执并向 android 客户端发送确认,以便它知道命令 将被 执行。

如您所见,实施此类解决方案需要做很多工作,所以让我总结一下:

  • 定义您的用例。系统必须支持哪些操作以及参与方如何参与任何情况。
  • 为每个用例查找极端案例。比如需要解决的认证问题
  • 对以最佳方式支持您的想法的技术进行一些研究。也许网络服务不是最好的解决方案?到底什么是网络服务? (似乎是任何人都使用的流行语之王)。也许 Web SocketsXML RPC 甚至 SOAP 是更好的选择?
  • 为组件定义协议
  • 实施它

最后一个音符。我知道这是一个相当长的答案?这可能会在读者脑海中产生很多问题。但是,不要气馁!你不必做我在这里写的任何事情。好吧,也许除了安全问题。