ServerSocket méthode accept()
Qui sait comment le port est choisi lorsque je suis à l'aide d'accepter la méthode de la classe ServerSocket? Est-il possible de définir une plage pour les ports de la méthode peut choisir? Puis-je prendre " les ports un par un dans l'ordre?
ServerSocket sSocket = new ServerSocket(5050);
Socket socket = sSocket.accept();
essayez getLocalPort et voir si c'est vrai.
Est-il un bon livre que vous lisez? "plain old socket" sonne bizarre pour moi.
Oui, c'est la Tête la Première, Java, un livre pour les débutants.
Je pense que cette image est au moins à confusion, si pas totalement tort.
N'avait-il l'habitude de travailler de cette façon? C'est drôle que je pensais que cela a fonctionné de cette façon, aussi. Une raison de plus pourquoi je n'ai pas beaucoup de soins pour la "Tête la Première" série.
Est-il un bon livre que vous lisez? "plain old socket" sonne bizarre pour moi.
Oui, c'est la Tête la Première, Java, un livre pour les débutants.
Je pense que cette image est au moins à confusion, si pas totalement tort.
N'avait-il l'habitude de travailler de cette façon? C'est drôle que je pensais que cela a fonctionné de cette façon, aussi. Une raison de plus pourquoi je n'ai pas beaucoup de soins pour la "Tête la Première" série.
OriginalL'auteur Eugene | 2010-11-29
Vous devez vous connecter pour publier un commentaire.
Le diagramme est incorrect (et est répertorié dans la non confirmés d'errata sur la O'Reilly site).
La client choisit son port au hasard (vous n'avez pas besoin de faire quelque chose de spécial en Java) et se connecte au serveur sur le port que vous avez spécifié. À l'aide de la
netstat
outil de ligne de commande vous pouvez le voir, cette - première, juste à l'écoute du serveur de socket avec pas de clients:(il y en a beaucoup d'autres entrées, j'ai juste enlevé les sans lien entre elles)
Maintenant avec 1 client qui se connecte à partir de l'hôte local (127.0.0.1):
Depuis le client se connecte à partir de la même machine, nous voyons deux connexions établies - un à partir du serveur vers le client (1), l'autre à partir du serveur vers le client (2). Ils ont opposé des locaux et étrangers adresses (car ils parlent les uns aux autres) et vous pouvez voir le serveur est encore en utilisant le port 5050 alors que l'original socket serveur (3) continue à écouter sur le même port.
(ils sont de la Mac, mais Windows/Linux ont aussi
netstat
donnant le même résultat)Parce que le client choisit son port local au hasard, comme il le dit dans la réponse.
Le Client choisit son port local est très bien. mais la question est serveur est ÉTABLIE sur 5050 et dans d'autres de l'entrée reste à l'écoute sur le même port 5050. Pourquoi il utilise le même port?
Je ne suis pas sûr de ce que vous demandez. Le serveur de socket continue en utilisant le port 5050 afin que les nouveaux clients peuvent se connecter à elle. La nouvelle connexion utilise le port 5050 sur le serveur-côté parce que c'est la façon dont le protocole a été défini. La raison, c'est possible, c'est que "l'identité" d'une connexion est basée sur la 5-tuple: (adresse IP source, port source, adresse IP de destination, le port de destination, le protocole (tcp ou udp)). Le changement de l'un champ (généralement le port source) est suffisant pour donner une nouvelle, distincte de connexion.
OriginalL'auteur SimonJ
Vous a choisi le port, quand vous avez dit à new ServerSocket(5050). Tout ça sur l'utilisation d'un autre port pour le socket accepté est de 100% de BS.
OriginalL'auteur user207421
Une connexion TCP se compose de quatre parties:
Il peut y avoir, par exemple, plusieurs clients connectés au même serveur de port - tant que les clients n'ont pas la même IP et la même prt, c'est ok. Et pour cette partie, le Système d'Exploitation prend en charge.
Il est donc tout à fait ok pour écouter simplement sur un port.
Oubliez le livre. C'est faux.
OriginalL'auteur thejh
La ServerSocket définit le port dans le cadre d'un constructeur.
Si vous ne spécifiez pas un port, le support n'est pas lié (c'est à dire ne sont pas accessibles).
Pour obtenir le port de la Prise de raccordement, à l'utilisation getPort() et ne pas getLocalPort(). Le second vous donnera le port de votre serveur.
Je ne suis pas tout à fait sûr de ce que tu veux dire. 100 sockets connectés à votre serveur de se connecter via le port 5050. Si tu veux dire que le port de la machine qui se connecte à vous, puis utilisez getPort().
OriginalL'auteur Codemwnci
Vous pouvez passer
0
comme un numéro de port pour créer un serveur de socket sur le port libre, ou de faire une méthode de ce genre pour créer un serveur de socket pour n'importe quel port disponible dans la gamme donnée:La boucle ne prend pas soin de l'autre exception (
SecurityException
par exemple), mais vous pouvez l'ajouter.bien sûr, merci, fixe.
Ne présente pas de travail, parce que quand il retourne le ServerSocket, il s'arrête à la fonction?
OriginalL'auteur khachik