Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [JAVA] client/server che non funziona

    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??

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    nessuno lo sa?

  3. #3
    e' logico che ci sia un timeout ...

    codice:
    ServerSocket serverSocket = new ServerSocket(4444);	
    
    try {
    while(true) {
                    Socket socket = s.accept();
                    System.out.println("Accepted socket "+socket);
    
                 };
    }
    catch(IOException e)
    {
    System.out.println("Impossibile aprire la connessione");
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non vedo perchè tu debba far collegare il client alla porta 80, quando il server è in ascolto sulla 4444. Io ho scritto una chat in Java e l'ho provata sia in rete LAN che su Internet e funziona, ma il client l'ho fatto collegare dandogli l'indirizzo IP dove gira il server e la porta su cui il server è in ascolto...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    non è che lo facevo collegare alla porta 80 cosi, a caso

    testavo client e server e volevo capire quale dei due non funzionasse, cosi ho messo il server in ascolto sulla porta 80 e ho provato ad usare un client esterno (telnet,o il browser)
    il risultato è stato che il server non riceveva proprio un bel niente

    per cui, dando per assunto che telnet e internet explorer funzionano, è il server che non va

    tanto piu che con il client riesco a collegarmi a risorse esterne tipo server web, quindi funziona.

    Il server che ho postato non funziona. Perche??

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Bella domanda... dovrebbe funzionare.

    Crei il ServerSocket
    Lo metti in ascolto (accept) in modo che crei una Socket
    All'arrivo della connessione stampi un messaggio.

    Dovrebbe funzionare... ti dà qualche errore?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    no! non fa assolutamente niente

    ho fatto queste due classi stupide proprio per ridurre il problema all'osso infatti...il server fa solo accept e poi stampa.
    Io sono sicuro che in qualche modo faccia binding solo su indirizzi locali, non so come o perche

    tra l'altro per essere piu generico possibile l'eccezione che catcho è una exception, quindi dovrei essere in grado di intercettarle tutte

    questa cosa non ha senso

  8. #8
    Originariamente inviato da Gil Mour
    no! non fa assolutamente niente

    ho fatto queste due classi stupide proprio per ridurre il problema all'osso infatti...il server fa solo accept e poi stampa.
    Io sono sicuro che in qualche modo faccia binding solo su indirizzi locali, non so come o perche

    tra l'altro per essere piu generico possibile l'eccezione che catcho è una exception, quindi dovrei essere in grado di intercettarle tutte

    questa cosa non ha senso
    hai letto il mio msg sopra ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    si...scusa,ma non ho colto il significato

    voglio dire,lo so il motivo per cui il client riceve una eccezione di timeout ma quello che non mi spiego è perche il server non funzioni

    poi non capisco il codice che hai allegato
    che dovrebbe avere di diverso dal mio ?

  10. #10
    Originariamente inviato da Gil Mour
    si...scusa,ma non ho colto il significato

    voglio dire,lo so il motivo per cui il client riceve una eccezione di timeout ma quello che non mi spiego è perche il server non funzioni

    poi non capisco il codice che hai allegato
    che dovrebbe avere di diverso dal mio ?
    da quello che mi ricordo la accept() non rimane in attesa, ma devi inserirlo dentro un ciclo while come sopra.
    prova e facci sapere.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.