我目前正在开发一款基于Java的游戏,可以在没有服务器的情况下玩P2P。到目前为止,我已经能够让它工作,一个人进入另一个人的IP,我接到电话
InetAddress.getLocalHost().getHostAddress());
但是,这仅适用于同一网络中的两台计算机。我如何获得跨网络的IP? 谢谢你的帮助!
编辑: 这是1v1游戏,因此多个连接不是问题。我打算让用户通过Skype或其他东西发送IP ...这只是我想和朋友一起使用的东西。防爆。它会显示IP,您将其发送给您的朋友,然后使用它进行连接。
答案 0 :(得分:1)
即使是洪流P2P网络也使用服务器来确定对等体的IP地址。获取IP地址后,当然是在对等体之间建立连接。所以我建议至少一个Web服务来列出对等体的IP地址。 (或者你可以将listActivePeers.php / aspx / etc文件放到你的网站上,每隔5分钟ping一次并列出已经ping过的ip地址。)
而且我还想指出,除非你有一些玩家,否则每个对等节点都需要打开与另一个节点的连接,这种连接不是很有效。如果您有100个在线播放器,您将为每个对等端设置100个连接,有时某些接入点或调制解调器不支持这种有效连接!它们可能会卡住或减速。
此外,您还需要处理大量的并发问题。认为两个数据同时出现在两个对等体上。在做任何动作之前,同行需要互相检查“如果我可以做出这个动作?或者你们中的任何一个做出任何动作我应该知道吗?”。因此,在每次移动之前,您将通过在他们与他们之间的连接上发送一些信息来锁定其他同伴,并且每个人都会在移动之前执行此操作。
更新(来自我上面的评论)
查看此链接有关您的IP地址的信息。 https://stackoverflow.com/a/2939223/1216609同时谷歌为“调制解调器端口打开或转发[接入点/调制解调器的品牌/型号]”查询转发特定于您的调制解调器或路由器的端口。
答案 1 :(得分:0)
这个问题是关于找到你想要的IP:How to get the ip of the computer on linux through Java?
您还需要使用某种端口转发连接到不同网络上的计算机。