我正在为一款名为GTA的游戏开发Match Maker,问题是游戏服务器使用7777端口,我需要打开这个端口到世界各地允许玩家加入服务器,我不知道我希望用户对他们的路由器进行任何更改。
注意:游戏服务器不是我的,我无法修改其源代码,我只是启动它。
所以,我发现Cling可以处理端口转发,但我不能让它工作!
我正在使用的代码:
public static void openports() throws UnknownHostException {
InetAddress i = InetAddress.getLocalHost();
System.out.println(i.getHostAddress());
UpnpService upnpServiceTCP = new UpnpServiceImpl(new PortMappingListener(new PortMapping(7777, i.getHostAddress(), PortMapping.Protocol.TCP)));
upnpServiceTCP.getControlPoint().search(new STAllHeader());
UpnpService upnpServiceUDP = new UpnpServiceImpl(new PortMappingListener(new PortMapping(7777, i.getHostAddress(), PortMapping.Protocol.UDP)));
upnpServiceUDP.getControlPoint().search(new STAllHeader());
}
任何人都有任何想法让它发挥作用?
答案 0 :(得分:6)
您可以使用以下代码
来实现目标private void doPortForwarding() {
PortMapping[] desiredMapping = new PortMapping[2];
desiredMapping[0] = new PortMapping(8123, InetAddress.getLocalHost().getHostAddress(),
PortMapping.Protocol.TCP, " TCP POT Forwarding");
desiredMapping[1] = new PortMapping(8123, InetAddress.getLocalHost().getHostAddress(),
PortMapping.Protocol.UDP, " UDP POT Forwarding");
UpnpService upnpService = new UpnpServiceImpl();
RegistryListener registryListener = new PortMappingListener(desiredMapping);
upnpService.getRegistry().addListener(registryListener);
upnpService.getControlPoint().search();
}
答案 1 :(得分:4)
当你想要像这样的portforwad端口时,Cling有一些问题。 您应该使用以下代码:
UpnpServiceImpl upnpService = null;
PortMapping[] arr = new PortMapping[2];
arr[0] = new PortMapping(7777, InetAddress.getLocalHost().getHostAddress(), PortMapping.Protocol.TCP,"My Port Mapping1");
arr[1] = new PortMapping(7777, InetAddress.getLocalHost().getHostAddress(), PortMapping.Protocol.UDP,"My Port Mapping2");
upnpService = new UpnpServiceImpl(new PortMappingListener(arr));
upnpService.getControlPoint().search();
不要忘记打开路由器上的UPnP。
当你的沟通结束时,你应该把它关掉:
upnpService.shutdown();