【发布时间】:2015-08-31 17:04:41
【问题描述】:
我正在做一个允许用户在线玩的安卓应用。
目前,我使用 TCP 服务器:当两个人连接时,服务器负责在两个客户端之间转发数据包。
我想用带有谷歌应用引擎的 java servlet 替换我的服务器。这个新服务器将仅用于连接两个玩家。
它会以这种方式工作: 玩家 A 打开一个服务器套接字,然后将连接详细信息发布到服务器。 当玩家 B 想与 A 对战时,他向服务器询问 A 的端口号,然后直接连接到 A。
问题是如果玩家 A 在 NAT 后面,我不确定它是否会起作用。当玩家 A 打开一个服务器套接字时,它打开了它的 192.168.x.y 地址的一个端口,但它是否向盒子请求端口转发?我认为它不会...
所以有两个问题: 即使有NAT或防火墙,是否可以在两台设备之间建立直接连接TCP(我不知道防火墙如何在Android上工作......) 如果不可能,最好的解决方案是什么:是否可以做一个TCP服务器来确保与应用引擎的消息交换?
提前谢谢你。
【问题讨论】:
-
'玩家 A 打开一个服务器套接字,然后将连接详细信息发布到服务器。'。抱歉,我什至无法理解您场景的第一句话。
-
这个项目 (github.com/kaklakariada/portmapper) 有 UPnP 端口映射 Java 代码,它在 J2SE 中工作,但不了解 Android。我已经尝试过了,并且在我的 Thomson vdsl2 路由器上工作得很好。我在 Java-gaming.org 网站 (java-gaming.org/index.php?topic=22088.0) 中找到了该项目的链接
标签: java android tcp serversocket nat