@Override
        public void run() {
            if (cancelled) return;

            switch (method) {
                case METHOD_UDP:
                    portScanned(portNo, PortScanUDP.scanAddress(address, portNo, timeOutMillis));
                    break;
                case METHOD_TCP:
                    portScanned(portNo, PortScanTCP.scanAddress(address, portNo, timeOutMillis));
                    break;
                default:
                    throw new IllegalArgumentException("Invalid method");
            }
        }
Perform an asynchronous (non-blocking) port scan

@param portListener - the listener to fire portscan results to.
@return - this object so we can cancel the scan if needed
library/src/main/java/com/stealthcopter/networktools/PortScan.java