假设我有一台服务器和两台连接到它的客户端。 (通过TCP,但它并不重要)两台电脑之间没有开放端口的通信,使用第三台计算机来建立连接
我的目标是让这两个客户端之间的直接连接。例如,允许两个玩家直接进行语音联系,或者可以安装任何其他不需要服务器交互的客户端插件(例如在两者之间玩某种随机游戏)。服务器可以在那里帮助建立连接。
从duskwuff的回答,我有几条线索:
http://en.wikipedia.org/wiki/STUN描述的算法来做到这一点,并
http://en.wikipedia.org/wiki/UDP_hole_punching
从这些,我得到了更多的线索:
http://www.h-online.com/security/features/How-Skype-Co-get-round-firewalls-747197.html
http://nutss.gforge.cis.cornell.edu/stunt.php - 一个可能的STUN实现,使用TCP
随着时间的推移,我肯定可以为我的计划制定一些计划。现在我使用C++和TCP(Qt套接字或Boost套接字),但是如果需要的话,我不介意在C中做UDP并封装它。
赏金是有与++的C和C,可能会给提示,使这更容易,通过链接到示例程序,更新库,或任何其他有用的信息,任何有经验的程序员。有记录的灵活的工作C++ TCP实现将是最好的,但我会拿我得到的!
临时端口被用于向一个**知名的服务端口到服务器的请求响应* *(即HTTP,FTP等)。这样服务器众所周知的服务端口在响应请求时不会被阻塞,并且可以接受新的连接。例如,当您打开FTP连接时,初始请求会通过端口20,服务器接受连接请求并启动一个进程以在另一个端口(临时端口)上使用该会话。如果所有会话都通过同一个端口,则一次只能有一个会话保持连接。 – Xint0
@ Xint0:这不太准确。 “临时端口”根本不涉及HTTP。连接由本地ip,本地端口,远程ip和远程端口的唯一元组标识。只要远程IP或远程端口对于任何给定的一对不同的连接都不同,就可以在单个本地IP和端口上安装许多可以处理的连接。 –
@R ..当我写HTTP时,我指的是HTTP服务器众所周知的服务端口号80。 HTTP是应用层的协议。临时端口用于传输层(TCP,UDP等) – Xint0