IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Deux socket sur un port?


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut Deux socket sur un port?
    Bonjour,
    Je pensais qu'on ne pouvait avoir qu'une socket sur un port donné.
    Cependant lorsque j'écris un client serveur et que je lance par exemple 1serveur et 2clients dessus, les deux sockets produitent par mon serveursocket m'indique que le localport est celui d'écoute du serveur; les "remote" ports sont quant à eux différents.
    L'affichage des sockets côté client est conforme, les localport sont différents, et le "remote" port correspond à celui d'écoute du serveur.
    J'en déduit donc que l'on peut avoir n socketn sur le même port, à moins que l'api java ne masque les véritables N° port du côté du serveur.
    Pour synthétiser voilà les traces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sur le serveur:
    Accept Socket[addr=/127.0.0.1,port=52249,localport=45678]45678 52249
    Accept Socket[addr=/127.0.0.1,port=52252,localport=45678]45678 52252
     
    Client 1:
    Connexion ?tablie: Socket[addr=localhost/127.0.0.1,port=45678,localport=52249]
     
    Client 2:
    Connexion ?tablie: Socket[addr=localhost/127.0.0.1,port=45678,localport=52252]

    Merci d'avance pour vos réponses.

    Nico

  2. #2
    Membre éprouvé Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par défaut
    Un ServerSocket est un serveur ... bon je sais c'est facile
    Donc il doit pouvoir gérer plusieurs clients et bien sûr écouter sur le même port (sinon on ne connaîtrait jamais le port en fonction du nombre de client)

    Ce qui est fait c'est que le serveur reçoit juste les requêtes des clients et ensuite créé un 'fils' (dans un autre Thread) pour gérer ce client; c'est toujours le même principe (serveur http etc...)

    Le serveur fils et le client dialogue ensuite via leur input et output stream


    Il y un un petit exemple, un peu long, ici mais il y en plein sur le net.

    Celui-ci est un peu plus simple

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Merci pour cette réponse. Je connais bien le fonctionnement des clients/serveurs et leur programmation. Je n'avais simplement jamais remarqué que les sockets du côté serveur semblaient être sur le même port. Je voulais une confirmation ou infirmation sur le fait que deux sockets pouvaient être sur le même port. Du coup l'identification d'une socket ne peut être uniquement l'adresse ip et le numéro de port. Quelles sont les autres infos? Combien de sockets maximales sur un port?
    Je reste tout de même perplexe sur cette relation 1-N entre une socket et un port.
    D'autres idées?

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Il ne peut y avoir qu'une socket sur un port donné.
    Le serveur à toujours le même port en écoute pour qu les clients sachent où se connecter, maintenant cela ne veux pas dire que la socket client discute avec la socket serveur sur le port d'écoute, bien au contraire.
    En fait, c'est le système d'exploitation qui gère ça : lorsqu'un client demande une connexion sur un port d'écoute d'un serveur, voici se qui se passe :
    - côté client : une socket est crée avec comme port local le premier disponible ( c'est l'os qui choisi ) et comme port distant, le port d'écoute du serveur.
    - côté serveur, le serveur reçoit la demande de connexion sur le port d'acoute. A ce moment, l'os crée une nouvelle socket avec comme port local, le premier disponible et comme port distant, le port local du client.


    Pour t'en persuader :
    - crée un serveur et une connexion d'un seul client sur ce serveur
    - tape "netstat" dans la console pour voir les ressources réseau utilisées.
    Tu constateras côté client qu'il y a une socket active dont le numéro de port est le port local attribué par l'os
    Tu constateras côté serveur qu'il y deux socket actives : une qui écoute sur le port local d'écoute et une autres dont le port local a été attribué par l'os. C'est cette dernière socket qui communique réellement avec le client. D'ailleurs, la méthode accept() de ServerSocket tu retourne une nouvelle instance de Socket qui correspond à cette dernière. C'est sur cette dernière que tu vas appeler les méthode write, read etc.

    EDIT : pour le nombre maximum de connexions simultanées, tu peux le calculer comme cela :
    - Les numéros de port vont de 1 à 65536 ( le 0 est exclus, car celui-ci veut dire "donne moi le premier numéro de port disponible ).
    - La dessus tu enlèves les 1024 premiers port qui sont normalement réservés ( mais rien ne t'empêche vraiement de les utiliser du moment où ils ne sont pas déjà en cours d'utilisation ).
    - Sur ce qui reste, tu retires ceux qui sont déjà en cours d'utilisation par d'autres applications ( s'il y en a ).
    --> Au final, cela te donnes environ 64512 connexions simultanées possible, en théorie, car en fonction du système d'exploitation ce nombre peut être limité ( en centaine par exemple il me semble pour un windows 98 ).

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Merci pour cette réponse qui me confortre dans ce que je savais déjà, maintenant reste à expliquer pourquoi l'affichage de la socket (pas la socketServer) côté serveur donne comme port celui d'écoute du serverSocket et non le réel de la socket.

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    parce que c'est transparent, c'est l'os qui gère ça.

Discussions similaires

  1. Ouverture de flux entre deux serveurs sur le port FTP
    Par Tiffany2015 dans le forum Administration
    Réponses: 2
    Dernier message: 14/05/2015, 12h20
  2. Réponses: 1
    Dernier message: 18/09/2007, 18h31
  3. Réponses: 2
    Dernier message: 26/07/2007, 09h17
  4. nombre de socket sur un meme port ?
    Par ginnovy dans le forum Développement
    Réponses: 3
    Dernier message: 25/10/2002, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo