我有一个基于Windows的应用程序可以做某种工作。
我想创建一个iOS应用程序,可以通过Internet将消息发送到目标计算机上运行的特定应用程序。
所以,我的问题是如何在不指定IP地址和端口的情况下绑定我的iOS客户端和Windows服务器应用程序,只需使用类似于Team Viewer中的某种键,例如:服务器应用程序设置了密钥和密码,另一个网络的客户端应用程序可以使用匹配的密钥和正确的密码连接到服务器应用程序。
我不需要共享屏幕或其他东西,只想发送/获取二进制消息。
有没有办法在不使用某些Web服务的情况下连接应用程序?
或者仅使用Web服务为客户端和服务器应用程序建立连接而不是控制消息队列?
答案 0 :(得分:8)
我相信你需要的是服务器应用程序和iOS之间的点对点通信通道,这里的主要问题是你需要遍历这两个设备之间的NAT。
有几种方法可以实现这一点, UDP Hole Punching 就是其中之一,易于实现,在NAT遍历中成功率很高。
要与此方法建立连接,您基本上需要三个组件:
Peer :传统的UDP客户端/服务器,它与在LAN上运行的UDP应用程序相同。
STUN服务器:通过网络地址转换器(NAT)简单遍历用户数据协议(UDP)的服务器。它只是帮助您将本地计算机地址映射到公共计算机地址。
您不需要编写或部署自己的,有几个STUN服务器可供公众使用,203.183.172.196:3478 (s1.taraba.net)
就是其中之一(如果需要,还有一些开源实现部署自己的例如http://sourceforge.net/projects/stun/)。
公共STUN服务器的已编译列表: https://gist.github.com/zziuni/3741933
这是一个简单的STUN Client实现,有一个很好的解释: http://www.codeproject.com/Articles/18492/STUN-Client
Rendezvous服务器:一个简单的公共服务器,为所有在线对等体保存公共地址。
沟通步骤:
<强>公告强>
1- Peer从STUN服务器查询自己以查找它的公共IP:端口地址。
2- Peer向Rendezvous Server宣布自己,并设置它的通信状态。
3- A Peer应定期更新其州和公共地址。
<强>连接强>
1-应用程序将从Rendezvous Server找到目标对等方的公共地址(基于ID / Token,...)
2-应用程序将与提供的公共IP建立UDP连接:端口地址与传统LAN UDP通信相同。
3-应用程序应检查Rendezvous Server以更新目标对等方公共地址/状态。
注意:UDP打孔不适用于所有NAT组合,在这种情况下,您应该使用中继服务器建立连接,它基本上用作链接彼此之间看不到的梨之间(他们的NAT被封锁)
我建议您查看http://www.brynosaurus.com/pub/net/p2pnat/,了解有关通过NAT进行点对点通信的更多信息。