Impossibile creare un socket: java.net.ConnectException: Il collegamento ha rifiutato: connect
-
26-10-2019 - |
Domanda
Ho intenzione di creare un socket e ottenere un InputStream
. Ecco come ho provato.
try {
final String serverIP = "111.111.111.111";
final int serverPort = Integer.parseInt(server_port);
final InetAddress serverAd=InetAddress.getByName(serverIP);
final InetAddress localAd =InetAddress.getByName(local_ip);
final int localPort = 4040;
Socket socket = new Socket(serverAd, serverPort, localAd, localPort);
}
Ma c'è un'eccezione sollevata,
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:276)
at shootist.Porter.run(Porter.java:41)
Qui il server invia mi RTP dei dati e lato server è ok e confermate. Ho mandato invitare e ottenuto 200 pure. Se c'è un problema nella mia IP e la porta, credo, tutte le risposte non possono consegnato alla mia porte IP e dato. Ma non può accadere come il server mi manda risposte al mio IP e dato il numero di porta. Come posso risolvere il problema? Dove ho sbagliato e che cosa?
Soluzione
A "connection refused" mezzi di errore dello stack presa sulla macchina server ha ricevuto la tua richiesta di connessione e intenzionalmente rifiutato di accettarla. Ciò avviene per una delle due possibili ragioni:
1) non v'è alcuna presa di ascolto che funziona sulla porta che si sta tentando di connettersi.
2) c'è un socket in ascolto, ma il suo backlog di connessioni in attesa è piena, quindi non c'è spazio per accodare la richiesta in quel momento.
Per differenziare tra i due, provare a ricollegare un paio di volte con un ritardo tra ogni tentativo. Se si ottiene lo stesso errore in modo coerente, poi 1 # è probabile il colpevole. Assicurarsi che il numero di porta è corretto. Se 2 # è il colpevole, vostro riconnessione ha una possibilità di successo alla fine.
Altri suggerimenti
Connessione rifiutata mezzo vostro stanno tentano di connettersi a un server che non è in ascolto su quella porta, o è troppo backlog per accettare la connessione.
Un modo semplice per verificare ciò è quello di provare
telnet 111.111.111.111 4040