【问题标题】:Client-Server application message exchange over Internet通过 Internet 进行客户端-服务器应用程序消息交换
【发布时间】:2014-09-15 19:22:48
【问题描述】:

我有一个基于 Windows 的应用程序,它可以做一些工作。

我想制作一个 iOS 应用程序,它可以通过 Internet 向目标计算机上运行的特定应用程序发送消息。

所以,我的问题是如何在不指定 IP 地址和端口的情况下绑定我的 iOS 客户端和 Windows 服务器应用程序,只需使用类似于 Team Viewer 中的某种密钥,例如:服务器应用程序设置了密钥和密码,并且来自另一个网络的客户端应用程序可以使用匹配的密钥和正确的密码连接到服务器应用程序。

我不需要共享屏幕什么的,只想发送/获取二进制消息。

有没有办法在不使用某些网络服务的情况下连接应用程序?

或者使用 Web 服务只是为客户端和服务器应用程序建立连接而不是控制消息队列?

【问题讨论】:

  • 这可以使用 AngularJs 以非常简单的方式完成,但我相信还有其他一些方法可以完成,我们目前为我们的生产系统准备了类似的东西 :)跨度>
  • 即使你写了一个网络服务,你也需要通过一些 ip-link 来定位那个资源,对吧?我不确定要求。但是 Teamviwer 是一个点对点的应用程序。电视给出了一个数字,但有中介服务器/中继服务器将有助于实现密钥和密码以连接到正确的人。该数字主要用于解决点对点网络问题。
  • DJKRAZE,RCBrand,谢谢你的回答我认为这是关于点对点的,但我不知道如何将 iOS 点连接到 Windows 点……使用什么协议(?)?

标签: c# objective-c sockets networking stream


【解决方案1】:

我相信您需要的是服务器应用程序和 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 Server:一个简单的公共服务器,保存所有在线对等点的公共地址。

沟通步骤:

公告

1- Peer 从 STUN 服务器查询自身以找到它的公共 IP:端口地址。

2- Peer 向 Rendezvous Server 宣布自己,并设置其通信状态。

3- Peer 应定期更新其状态和公共地址。

连接

1- 应用程序将从 Rendezvous Server 中找到目标 Peer 的公共地址(基于 ID/Token,...)

2- 应用程序将使用提供的公共 IP:与传统 LAN UDP 通信相同的端口地址建立 UDP 连接。

3- 应用程序应检查 Rendezvous Server 以更新目标对等公共地址/状态。

注意:UDP 打洞不适用于所有 NAT 组合,在这种情况下,您应该使用 中继服务器 来建立连接,它本质上是一个链接在无法看到彼此的梨之间(它们的 NAT 被阻止)

我建议您查看http://www.brynosaurus.com/pub/net/p2pnat/,了解有关通过 NAT 进行点对点通信的更多信息。

【讨论】:

  • 有史以来最好的答案!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2012-11-08
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多