通过Web服务与Android应用程序(java)和Windows应用程序(vb.net)之间的通信

时间:2016-06-23 06:30:06

标签: java android asp.net web-services remote-access

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

1 个答案:

答案 0 :(得分:0)

由于这是一个广泛的问题而且你要求提出想法让我倾注一些想法。

从哪里开始?为双方理解的Web服务定义协议。例如,定义一个Android客户端可以将消息推送到的URI(使用PUT或POST),并且vb.net客户端可以轮询更新(使用GET)。由于我们在这里使用一个URI,因此发送到URI的有效负载必须定义要执行的操作。 Android客户端可以发布消息' {command:restart}"那么vb.net客户端应该知道如果收到消息,他必须重启机器。

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

所以第一个问题可以通过额外的URI解决,其中android客户端可以轮询vb.net客户端提供的系统状态之王。例如,vb.net客户端可以发送消息' {state:restarting}'在重新启动之前到URI。当然,每次发生某些事件时,vb.net客户端都需要更新该URI。安全问题?安全很难。您可能希望创建证书并签署发送的请求,以便服务器使用它。然后,服务器可以检查是否真的是您发送此请求的人。或者有你的证书的人,重播请求或找到一些打破整个东西的方法。所以你还可能希望TLS使用certificate pinning之王。您可能已经知道这一点,但无论如何我都要重复它:不要通过不安全的网络发送凭据。 base64(在basic authentication中使用)也不是某种加密。可以使用可包含在命令中的随机数来解决最后一个问题。或者vb.net客户端在收到命令时从URI(使用DELETE)清除命令。它应该更新状态URI,以便android客户端不再发送请求。

或者你放弃整个网络服务的东西使用像Web Sockets这样的技术。然后android客户端可以向套接字发送命令。服务器接收命令并将其发送到vb.net套接字。当vb.net套接字收到命令时,它会向服务器发送某种传送收据并执行命令。服务器接收收据并向android客户端发送确认信息,以便知道命令将被执行

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

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

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