使用cling进行路由器端口转发

时间:2013-03-10 16:39:28

标签: java port router forwarding

我正在为一款名为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());
}

任何人都有任何想法让它发挥作用?

2 个答案:

答案 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();