Port 7777 has been used sometime weird, means that I have two phones, one can open port 7777, another one can’t. The reason is that maybe a third app installed on the phone is using the port(7777).
I have seen the snippet which coms from org.jivesoftware.smackx.bytestreams.socks5.Socks5Proxy.
if (getLocalSocks5ProxyPort() < 0) {
int port = Math.abs(getLocalSocks5ProxyPort());
for (int i = 0; i < 65535 - port; i++) {
try {
this.serverSocket = new ServerSocket(port + i);
break;
}
catch (IOException e) {
// port is used, try next one
}
}
}
else {
this.serverSocket = new ServerSocket(getLocalSocks5ProxyPort());
}
these codes are from public synchronized void start() method. Found that it just to check if port has been using when localSocks5ProxyPort < 0,
when not, doesn’t check weather port is already in use or not.
I changed the snippet to what it is below:
int port = Math.abs(getLocalSocks5ProxyPort());
try {
this.serverSocket = new ServerSocket(port);
} catch (IOException e) {
for (int i = 0; i < 65535 - port; i++) {
try {
this.serverSocket = new ServerSocket(port + i);
break;
}
catch (IOException e1) {
// port is used, try next one
}
}
} if (this.serverSocket != null) {
this.serverThread = new Thread(this.serverProcess);
this.serverThread.start();
} else {
LOGGER.log(Level.SEVERE, "couldn't setup local SOCKS5 proxy through all ports.");
}
And then everything is ok, the next port will be found if current one is already in use.
Anyone has better idea for this will be appreciated!