java.net.ConnectException: Connexion refusée lorsque SocketChannel.open est invoquée

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

  •  21-08-2019
  •  | 
  •  

Question

Je suis en train d'écrire un programme simple d'ouvrir un canal de socket à une adresse locale. Je reçois une connexion a refusé exception chaque fois que je lance ce programme

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'exception que je reçois est

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)

Je rencontre ce problème avec Sun Solaris et HP - UX. Il semble fonctionner très bien sur une machine Linux. Quelqu'un peut-il me faire savoir pourquoi la connexion est refusée? Je l'ai fait une netstat et a confirmé que le port n'est pas utilisé.

Merci d'avance!

Était-ce utile?

La solution

De la Javadoc pour SocketChannel.connect ()

  

Si ce canal est en mode non bloquant alors une invocation de cette méthode déclenche une opération de connexion non bloquante. Si la connexion est établie immédiatement, comme cela peut arriver avec une connexion locale, cette méthode renvoie true. Sinon, cette méthode retourne false et doit être complété ultérieurement opération de connexion en invoquant la méthode finishConnect.

Quand je lance votre code sur Linux, connectez-vous () retourne false donc il ne fait pas exception. Si vous ajoutez un appel à socketChannel.finishConnect (), vous verrez la même connexion a refusé exception que vous obtenez sur Solaris / HP-UX.

Je soupçonne que sur Solaris / HP-UX connect () retourne true où l'exception est levée immédiatement.

Autres conseils

La « Connexion refusée » message est ce que vous recevrez quand il n'y a pas de processus d'écoute sur le port spécifié (19015). On dirait que vous essayez de vous connecter à un service qui est pas là. netstat est même vous dire que le port n'est pas utilisé!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top