我还不确定这是否可行,我正在寻找可能找到更多信息的地方。它主要是作为练习完成的,但我想看看我是否可以实现这一点作为共享非常大的文件的解决方案,两个人之间的麻烦最少(我意识到可能存在一些类似的解决方案,但我仍然想要尝试写一个)。
基本设置如下: 我正在计划使用侦听端口XYZ的程序配置服务器。我有两个示例用户(A和B)。用户“A”想要与用户“B”共享文件。 “A”转到他的本地客户端并将一些信息推送到服务器。他找回了一个他可以发送给用户“B”但他喜欢的密钥(而不是发布或广播该位置)。用户“B”获取密钥,将其放入其客户端。他的客户端进入服务器并获取有关如何连接到用户“A”机器以进行文件传输的信息。
现在,这很简单,机器可以通过套接字直接连接,但我假设用户A和B在完全不同的网络上,在不同的公共IP(普通互联网用户)后面。所以我想知道的是,我可以让用户“A”和用户“B”监视服务器上的状态,当显然是时候共享文件时,使用服务器作为连接两者的桥梁。沟通握手,然后是新的套接字,或以某种方式加入连接到服务器的套接字?整个事情的警告是,我希望带宽不要沿服务器传输(或者我可以直接连接到服务器),但直接在两台机器之间进行对等,只使用服务器进行协商一个连接。
但我不知道在哪里查看有关此信息,或者是否可能:)
我的偏好是使用Java。
答案 0 :(得分:1)
为了在不使用服务器作为代理的情况下直接连接两个套接字,必须能够直接命中一个端点。
我可以想到没有任何设施可以协商NAT或PAT后面的两个连接,然后退出循环而其他两个连接。
如果您可以构建设计规范,客户端必须将各自的 listen 端口打开并映射到他们用于路由的任何系统中,那么就有可能。