Salve a tutti, vi scrivo per esporvi un problema che mi sta facendo letteralmente uscire matto,
ho un programma scritto in java, in cui non faccio altro che mettermi in ascolto su di una porta, e un altro programma sempre scritto in java in cui mi connetto tramite socket al programma precedente.
Il server si avvia senza alcun problema.
L'ambiguità è:
- Se da locale, provo a connettermi tramite indirizzo "localhost" o "127.0.0.1" la connessione viene stabilita con successo
- Se utilizzo un servizio come http://www.canyouseeme.org/ per testare la porta in questione, risulta aperta, e il server riceve la connessione, quindi funziona da remoto.
invece:
- Se da locale provo a connettermi, tramite il mio indirizzo ip pubblico effettivo (o meglio, quello del mio router, dove ho provveduto ad attivare il NAT per la porta necessaria verso il mio pc), la connessione non si stabilisce.
In poche parole, in localhost mi connetto, un server web esterno si connette con me, ma se io provo a connettermi passando attraverso il mio router, non da segni di vita.
Eppure il router stesso è raggiungibile,sia dall'esterno, che dall'interno, ma è come se la mia applicazione gli stesse "antipatica".
Premetto che è attivato solamente il firewall di windows, e non blocca i due programmi in questione.
Per essere sicuro che l'errore non sia nel codice sorgente del mio programma, ve lo allego (non è molto lungo, l'ho scritto solo per testare questo problema):
Client
codice:
package simpletcpclient;
import java.net.*;
public class Main {
private static final String IP = "localhost";
private static final int PORT = 90;
public static void main(String[] args) {
System.out.println("Attempting to connect to " + IP + " on port " + PORT + "...");
try {
Socket s = new Socket(IP, PORT); System.out.println("Succesful!");
s.close();
} catch(Exception exc) {
System.out.println("There was a problem. " + exc.getLocalizedMessage());
}
}
}
Server
codice:
package simpletcpserver;
import java.net.*;
public class Main {
public final static int PORT = 90;
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(PORT);
System.out.println("Listening on port" + PORT);
while(true) {
ss.accept().close();
System.out.println("Accepted and closed connection");
}
} catch(Exception exc) {
System.out.println("An error occurred." + exc.getMessage());
}
}
}
Sono su un portatile, connesso tramite wi-fi, al mio router (quello tipico Alice della telecom), il problema è un mistero.
Qualcuno ha già avuto questi comportamenti? Avete qualche idea su come potrei venirne a capo? Grazie in anticipo.