java.net.ConnectException:Connessione rifiutata quando SocketChannel.aperto viene richiamato

StackOverflow https://stackoverflow.com/questions/1073203

  •  21-08-2019
  •  | 
  •  

Domanda

Sto cercando di scrivere un semplice programma per aprire un socket canale di un indirizzo locale.Ho una connessione rifiutata eccezione ogni volta che ho eseguito questo programma

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;

public class testSocket {

        public static void main(String [] args) {
                try {
                        InetAddress addr = InetAddress.getByName("localhost");
                        InetSocketAddress remoteAddress = new InetSocketAddress(addr, 19015);

                        // Open a new Socket channel and set it to non-blocking
                        SocketChannel socketChannel = SocketChannel.open();
                        socketChannel.configureBlocking(false);

                        // Issue the Connect call on the remote address.
                        socketChannel.connect(remoteAddress);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

L'unica eccezione che mi viene

java.net.ConnectException: Connection refused
        at sun.nio.ch.Net.connect(Native Method)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:464)
        at testSocket.main(testSocket.java:17)

Ho incontrato questo problema con Sun Solaris e HP - UX.E sembra funzionare bene su una macchina Linux.Qualcuno può farmi sapere perché la connessione viene rifiutata?Ho fatto un netstat-a e ha confermato che la porta non è in uso.

Grazie in anticipo!

È stato utile?

Soluzione

Da Javadoc SocketChannel.connect()

Se il canale è in modalità non bloccante quindi un'invocazione di questo metodo avvia un non-blocking funzionamento della connessione.Se la connessione è stabilita immediatamente, come può accadere con una connessione locale, quindi questo metodo restituisce true.Altrimenti questo metodo restituisce false e che l'operazione di connessione devono poi essere completato richiamando il finishConnect metodo.

Quando eseguo il codice su Linux, connect() restituisce false, di conseguenza, non vi è alcuna eccezione.Se si aggiunge una chiamata a socketChannel.finishConnect() si vedrà la stessa connessione rifiutata eccezione, come si ottiene su Solaris/HP-UX.

Ho il sospetto che su Solaris/HP-UX connect() restituisce true, quindi, l'eccezione viene generata immediatamente.

Altri suggerimenti

La "Connection refused" messaggio è quello che riceverai quando non v'è alcun processo in ascolto sulla vostra porta specificata (19015). Sembra che si sta cercando di connettersi a un servizio che non c'è. netstat è addirittura si dice che la porta non è in uso!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top