2013-03-10 3 views
6

В настоящее время я разрабатываю Match Maker для игры GTA, проблема в том, что игровой сервер использует порт 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()); 
} 

у кого есть какие-либо идеи, чтобы заставить его работать?

ответ

5

Вы можете достичь своей цели, используя ниже код

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

    } 
4

У нас есть несколько проблем, когда вам нужны порты portforwad, подобные этому. Вы должны использовать этот код:

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