2013-03-10 20 views
6

Obecnie tworzę narzędzie do tworzenia dopasowań do gry o nazwie GTA, problem polega na tym, że serwer gry używa portu 7777 i muszę otworzyć ten port na świecie, aby umożliwić graczom dołączenie do serwera i nie chcę, aby użytkownicy wprowadzali jakiekolwiek zmiany w swoich routerach.Przesyłanie portów routera za pomocą przylgnięcia

Uwaga: serwer gry nie jest mój, nie mogę zmodyfikować jego kodu źródłowego, po prostu go uruchomię.

Odkryłem, że Cling może obsłużyć przesyłanie portów, ale nie mogę go uruchomić!

Kod używam:

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

ktoś ma jakiś pomysł, aby to działało?

Odpowiedz

5

można osiągnąć swój cel za pomocą poniżej kod

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

Cling ma kilka problemów, gdy potrzebujesz portów portforwad takich jak ten. Należy użyć tego kodu:

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

Nie zapomnij włączyć UPnP na routerze.

A kiedy kończy swoją komunikacji należy go wyłączyć tak:

upnpService.shutdown();