通过internet发送UDP数据报
sending UDP datagrams via internet
我是一个网络新手…我有一个(愚蠢的?关于UDP通信的问题。
我基于boost::asio库创建了两个简单的程序:一个服务器和一个客户端。这两个程序通过UDP套接字通信。客户端连接到服务器并开始传输数据报。它在我的局域网工作得很好。我使用IP地址连接到服务器(如。192.168.1.111)。
如果我的服务器应用程序在其他局域网工作,客户端必须通过internet连接怎么办?我如何连接到服务器?
我知道的唯一可能的解决方案是:
- 端口转发(不安全?)
- VPN(过于)
有更好的解决方案吗?
一些应用程序(如Skype或LogMeIn…)如何在没有VPN/端口转发的情况下工作,并且一个LAN中的用户可以到达其他LAN中的任何计算机?
有更好的解决方案吗?
是的。
Skype使用孔打孔技巧。
假设A想联系B:
-
A和B连接到服务器C
-
服务器C告诉B发送假UDP数据包给A (IP和端口使用)由A为Skype连接)有效地在它自己的穿孔(B)防火墙
-
此数据包被A丢弃(它来自NAT外),但现在A可以向B发送UDP数据包,这将使它们通过防火墙(B)路由器认为这是对[dummy]数据包的响应
这篇文章更详细地描述了它:How-Skype-Co-get-round-firewalls
相关文章:
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 连接UDP套接字,但仍然接收来自其他源的数据报
- UDP 客户端(接收器)未按预期接收数据报
- QT UDP套接字返回空数据报
- 在Wireshark中看到的数据报,未由QT UDP套接字收到
- QUdpSocket:无法接收数据报
- Udp 在 QT 定时器信号中写入数据报
- 是否可以在数据报套接字中同时用于发送和接收
- 通过Boost Asio获取UDP数据报长度
- QUdpsocket在处理前一个数据报时丢失数据报
- UDP 数据报套接字编程,服务器在 JAVA 中,客户端在 C++
- 如何修改数据报原始TCP/IP
- 数据报Unix套接字上的ECONNREFUSED
- Qt数据报结构结果:混合序列
- UDP数据报计数
- Boost.Asio数据报(UDP)套接字,既绑定又连接
- 用UDP发送数据报
- Boost 的 UDP 异步客户端接收自己的数据报
- 通过环回适配器在同一套接字上发送数据报(UDP)winsocket和recvfrom的C++问题
- 通过internet发送UDP数据报