Impossible de Créer un Socket :java.net.ConnectException: Connection refused: connect
Je vais créer un socket et obtenir une InputStream
. Voici comment je l'ai essayer.
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);
}
Mais il y a une exception,
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)
Ici, le serveur m'envoie des rtp de données et côté serveur est ok et confirmé. J'ai envoyé inviter et 200. Si il y a un problème dans mon IP et le port, je pense, toutes les réponses ne peuvent pas livré à mon IP et compte tenu de Ports. Mais cela ne peut arriver que le serveur m'envoie des réponses à mon IP et numéro de port donné.
Comment je peux résoudre ce problème? Où je me trompe et que?
Ajouter des exceptions du pare-feu pour le numéro de port sur le serveur et l'ordinateur client. Mieux encore, jetez votre pare-feu de votre PC.
Merci. Permettez-moi de savoir comment ajouter une Exception de pare-feu pour le port sur la machine client.
Merci. Permettez-moi de savoir comment ajouter une Exception de pare-feu pour le port sur la machine client.
OriginalL'auteur Débora | 2012-01-11
Vous devez vous connecter pour publier un commentaire.
Une "connexion refusée" erreur signifie que le support de la pile sur la machine serveur a reçu votre demande de connexion et intentionnellement refusé de l'accepter. C'est le cas pour une des deux raisons possibles:
1) il n'y a pas de socket d'écoute en cours d'exécution sur le port que vous essayez de vous connecter.
2) il y a un socket d'écoute, mais son carnet de commandes de connexions en attente est pleine, il n'y a pas de place pour la file d'attente de votre demande, à ce moment-là.
Pour différencier les deux, essayez de vous reconnecter un peu de temps avec un délai entre chaque tentative. Si vous recevez le même message d'erreur constante, puis le #1 est probablement le coupable. Assurez-vous que le numéro de port est correct. Si #2 est le coupable, votre reconnecter a une chance de réussir par la suite.
Merci Remy.J'ai changé les numéros de port et essayé. mais toujours la même erreur :(. Souhaitez-vous laissez-moi savoir comment faire pour créer un succès de la socket d'écoute.(Je m lettle peu de nouvelles.)
Expliquez-vous plus ", mais son carnet de commandes de connexions en attente est pleine, il n'y a pas de place pour la file d'attente.... ". De toute façon quand j'ai envoyé l'invitation et ensuite de réponse du serveur de 200 et le serveur commence à m'envoyer des données.Je dois attendre jusqu'à ce que le serveur envoie la réponse et d'obtenir le correspondant de port du serveur(à cause de port du serveur est défini dans la réponse.Invitation est envoyée à un autre port et de la prise doit être créé sur un autre port que le serveur décide.) Comme vous l'avez mentionné, j'ai essayé de rebrancher le connecteur. mais il n'a pas la même erreur s'est produite.
Quand un client tente de se connecter à un serveur, la demande est placé dans le serveur de file d'attente jusqu'à ce qu'il appelle
accept()
à retirer la demande. La file d'attente a une taille finie, ce qui est spécifié lors de la prise commence à écouter. Regardez la documentation de labacklog
paramètre du constructeur de lajava.net.ServerSocket
classe.Si vous ne pouvez pas vous connecter à l'adresse IP et le Port que le serveur renvoie à votre invitation, alors assurez-vous que l'adresse IP est accessible à partir de votre ordinateur client, et qu'il n'est pas un pare-feu/routeur entre qui peut bloquer la connexion.
OriginalL'auteur Remy Lebeau
Connexion refusée signifie que vous essayez de vous connecter à un serveur qui n'est pas à l'écoute sur ce port, ou s'il est trop en retard pour accepter la connexion.
Un simple moyen de tester cela est de l'essayer
Bon point sur le carnet de commandes. Le serveur devrait être dans une assez mauvaise façon pour elle d'être de retour connecté.
Pas nécessairement. Le carnet de commandes peut être un peu trop petite et le serveur
accept()
taux de risque d'être codé pour courir un peu trop lent. Vous ne savez jamais vraiment.Un modèle commun est d'avoir un accepteur thread qui ne fait rien mais les accepter et de créer des gestionnaires. Cependant, un chargé serveur peut délibérément ralentir l'accepter.
OriginalL'auteur Peter Lawrey