2013-03-10 3 views
6

का उपयोग कर राउटर पोर्ट अग्रेषण मैं वर्तमान में जीटीए नामक गेम के लिए एक मैच मेकर विकसित कर रहा हूं, समस्या यह है कि गेम सर्वर 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

क्लिंग में कुछ समस्याएं हैं जब आप पोर्टफॉरवाड बंदरगाहों को इस तरह चाहते हैं।

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