Avevo fatto un post simile tempo fa ma il problema non è mai stato risolto
Ho un'applicazione client/server abbastanza standard che gira perfettamente se entrambi i moduli stanno sulla stessa macchina, ma che non funziona provandola nella rete.
O meglio, l'ho testata improvvisando una rete lan con 2 pc e funzionava, mentre non funziona se tra i due pc c'e' internet.
Allora, tanto per essere sicuro che non dipendesse dalla mia applicazione, ho fatto una prova con questo client
codice:
public static void main(String argv[]){
String indirizzo=null;;
int porta=80;
boolean running=true;
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
while (running){
try {
System.out.print("Scrivi indirizzo: ");
indirizzo = in.readLine();
System.out.println("Tentativo di connessione all'indirizzo: "+indirizzo+" e porta "+porta);
Socket socket = new Socket(indirizzo,porta);
System.out.println("Connessione accettata");
running= false;
}
catch(IOException e) {
System.out.println("Impossibile aprire la connessione");
}
}
}
e questo server
codice:
public static void main(String argv[]){
try {
ServerSocket serverSocket = new ServerSocket(4444);
Socket socket = serverSocket.accept();
System.out.println("Connessione accettata");
}
catch(IOException e) {
System.out.println("Impossibile aprire la connessione");
}
}
Il client sono sicuro che funziona, dato che si collega correttamente ad altre risorse esterne (ad esempio il server web di html.it). Il server, invece...non va
Ecco le osservazioni che ho fatto
1. Uso il client per contattare il server, questo si risolve per il client in un timeout nella connessione
2. Uso un qualunque client per contattare il server (un browser, telnet,etc) ed il server non da segni di vita.
3. Ho usato uno scanner di rete che rileva l'host, ma non vede la porta 4444 aperta
4. I firewall sono spenti
Il dubbio che mi viene, anche se mi sembra assurdo, è che il server socket faccia binding su un indirizzo locale alla macchina ed invisibile dall'esterno, ma in ogni caso perche???
Queste due classi qua sopra non hanno Niente di particolare, è il solo modo di aprire un server tcp in java e non ha senso che non funzioni
Dov'e' che mi perdo??