Newsgroup: it.comp.java
Titolo: Socket Java

Ho un problema.
Sto provando a stabilire una connessione ad una macchina remota, ma non
riesco ad parire una Socket verso quella macchina.
Quello che ho fatto e' questo, se avete dei consigli ho avete risolto
problemi simili datemi un consiglio:
- ho scritto un programmino server che rimane in ascolto sulla porta 4444 di
una macchina HP-Ux (unix); le linee "chiave" del codice sono le seguenti:
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }
        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }
- ho scritto il programma client che dovrebbe aprire una Socket verso la
macchina dove gire il server, le linee di codice sono:
        Socket kkSocket = null;
        try {
            kkSocket = new Socket("indirizzoIPremoto", 4444);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new
InputStreamReader(kkSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: indirizzoIPremoto");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to:
indirizzoIPremoto");
            System.out.println( e );
            System.exit(1);
        }
Il programma server parte, ho provato a far partire contemporaneamente una
seconda istanza dello stesso server e mi dice che la porta 4444 e' gia'
occupata, segno che resta in ascolto correttamente (credo).
Quando faccio partire il programma client, questo entra nella seconda
"catch" quando tenta di inizializzare kkSocket ( kkSocket = new
Socket("indirizzoIPremoto", 4444) ).
Qualche idea? Anche su quale prove poter fare perche' non me ne vengono in
mente....
Grazie!

mente....
Elimina un possibile problema alla volta :-)
Prova a fare telnet dalla macchina client a quella remota (mi 
raccomando: sulla porta 4444) e vedi... se la strada è libera.
Poi facci sapere.
-- 
Ciao
	Fabrizio C.

 Poi facci sapere.
Grazie del consiglio! Ho provato, se accedo in Telnet quando il server non
e' partito, ovviamente mi rifiuta la connessione su quella porta. Una volta
fatto partire il server, tutto funziona con Telnet: accedo a quella porta,
il server risponde come deve rispondere, insomma riesco a dialogarci finche'
non mando un segnale di stop e si chiude il server e conseguentemente la
connessione.
Ora, perche' non riesco a inizializzare questa cavolo di Socket da parte del
client verso il server? ;-)
Ciao e grazie ancora per il consiglio, in questo modo ho localizzato il
problema, se non altro....

in questo modo ho localizzato il problema, se non altro....
Meglio che niente... ;-)
-- 
Ciao
	Fabrizio C.

 Meglio che niente... ;-)
Senza dubbio! :-)

        at Client.main(Client.java:12)
Immagino che la riga 12 di Client.java sia:
            kkSocket = new Socket("indirizzoIPremoto", 4444);
vero?
A questo punto inizio a pensare che forse dovresti controllare di aver 
scritto correttamente l'indirizzo IP (hai messo IP numerico o un 
nome?). Succede ;-)
-- 
Ciao
	Fabrizio C.

Hai fatto un piccolo errore, che lo stesso output dell'eccezione ti avrebbe
dovuto subito far saltare all'ochio.
Hai scritto il nome dell'indirizzo IP remoto tra apici. Quindi gli hai
passato non il contenuto della variabile [indirizzoIPremoto] ma una stringa
"indirizzoIPremoto".
Basta che togli gli apici da quella variabile, che tutto funziona (penso).

Basta che togli gli apici da quella variabile, che tutto funziona (penso).
Acc.!
E io che pensavo che "indirizzoIPremoto" fosse un "meta-nome" nel senso 
che Marted avesse sostituito il vero IP per motivi di... privacy.
A volte non dovrei dare per scontate certe cose... :-(
-- 
Ciao
	Fabrizio C.


Eh eh eh ;-))
"indirizzoIPremoto" l'ho scritto per motivi di privacy (non esiste aqlcuna
variabile "indirizzoIPremoto"), fra le virgolette nel programma vero c'è un
numero IP che e' assolutamente corretto (e' la prima cosa che ho
controllato).
Scusate, in effetti ho usato male il "meta-nome", poteva trarre in inganno!

No in effetti sono io che l'ho sparata.
C'ho provato.
Sorry, torno nella tana.

 Fai la verifica con telnet.
Il processo e' in ascolto, con Telnet va!

 java.net.ConnectException: Connection refused: connect
Di solito un problema del genere significa che:
o l'indirizzo ip č sbagliato oppure che non c'č effettivamente piů il


 Fai la verifica con telnet.
Intendo dopo aver provato a connetterti col client.
Puoi poi vedere se cambia qualcosa con
private InetAddress hostAddress=null;
private String serverHostName="host";//host è il nome completo del server
(esempio 
liudmilla.pd.gigi.it
)
try
       {hostAddress=InetAddress.getByName(serverHostName);//Ottiene
l'indirizzo dell'host del server
       }
      catch(UnknownHostException e)
       {System.out.println("Host sconosciuto");
       }
...
kkSocket = new Socket(hostAddress, 4444);
Non dovrebbe essere necessario tutto questo giro, ma è per togliere ogni
dubbio ;)
--
"Penso a quando il grande silenzio scenderà su tutto e dappertutto; allora
infine trionferà la musica" H.M.
Shannara

 riesco ad parire una Socket verso quella macchina.
[Cut]
A chi puo' interessare: il problema non era nel codice Java. Per effettuare
la connessione con il programmino avevo disabilitato un software firewall
(ZoneAlarm per la precisione). Mi sono accorto che attivandolo il programma
Java riesce a creare la Socket. Esattamente il contrario di quanto ci si
potrebbe spettare, no? Probabilmente il precedente user del mio PC ha
impostato dei filtri TCP/IP che vengono bypassati dal suddetto firewall,
attualmente e' l'unica cosa che mi viene in mente... fatto sta che ora
fdunziona tutto.
Grazie comunque a tutti!

Allora tutti quanti ci chiediamo... se c'era su un firewall, come mai
riuscivi a fare telnet ?
Hai davvero provato a fare telnet ? O l'hai fatto da un'altra macchina verso
un altro server e hai simulato un test che non sarebbe potuto fallire ?
J


No, no, telnet dalla mia macchina.
Non hai capito, oppure mi sono spiegato male....
Il firewall sul mio PC lo avevo disattivato per fare le prove con le
Sockets, percio' telnet funzionava benissimo, ma avrebbe funzionato comunque
anche con il firewall attivo perche' e' impostato per far uscire telnet.
E' al momento in cui ho attivato il firewall che il collegamento con le
Sockets Java ha cominciato a funzionare, allora ho ipotizzato che ci fossero
dei filtri sul mio PC (fatti dal precedente user) di cui non ero a
conoscenza e che il firewall riesce a bypassare.
Boh! Non lo so se fila come ragionamento..... ;-)

 Boh! Non lo so se fila come ragionamento..... ;-)
Con lo stesso programma avevo lo stesso problema su una nt workstation. Ci
ho messo un pò a capire perchè non accedeva per esempio alle risorse di
rete... Funzionavano solo telnet e ping. Per il resto la macchina era
isolata... Non mi risulta ci fossero altri  filtri attivi...


 ho messo un pò a capire perchè
Sì, ma se non ti dico il perchè...
Ecco: il problema era che pur disattivando ZA restava attivo il servizio
True Vector che gestisce, credo, le policy.
