Question

Lorsqu'un serveur accepte un client via une connexion tcp / ip, est créé un nouveau socket.

Est-il sûr d'utiliser le port LocalEndPoint (du point de vue du client) comme id? Exemple (du point de vue du serveur):

int clientId = ((IPEndPoint)client.RemoteEndPoint).Port;

Sur ma machine locale, le port semble être unique, mais avec plusieurs clients sur des machines différentes, il peut être pas toujours le cas.

Ma deuxième question: Disons que le port ne peut pas être utilisé comme un identifiant unique, comment le serveur (et donc la pile de protocoles) peuvent se différencier entre deux socket client (du point de vue du serveur).

TY.

Était-ce utile?

La solution

Le caractère unique d'une douille est identifiée par 4 valeurs:. (IP locale, port local, IP distante, port distant) et qui est la façon dont les piles de protocoles d'identifier une connexion

Compte tenu de cela, vous pouvez avoir plusieurs connexions à partir du même numéro de port à même numéro de port, mais par exemple à une autre adresse à distance. En général, vous devez demander spécifiquement les autorisations d'utiliser le même port local pour plus de 1 connexion sortante.

Votre exemple int clientId = ((IPEndPoint) client.RemoteEndPoint) .PORT; ne pas utiliser le port local, mais le port sur la machine distante. Ceci est certainement pas unique, car différents clients pourraient arriver à choisir le même port. Votre port du serveur est probablement fixé, et sera toujours le même pour toutes les connexions. Ainsi, si vous voulez quelque chose d'unique sur le côté serveur, vous devez utiliser les 4 valeurs mentionnées ci-dessus.

Toutefois, si vous avez seulement besoin d'un identifiant unique au sein de votre propre application client parmi les connexions que vous avez configuré vous, le port local fera.

Autres conseils

Ne pas utiliser le point final à distance - créer un GUID -. Pour chaque connexion (acceptée)

Passez le GUID retour à la prise de client - obtenir le client pour le sauver (bien mieux qu'une session HTTP) et ajouter le GUID à tous les en-têtes HTTP ultérieures visant à vous:)

alors !! la nécessité pour un parfait HastTable <> !!! seulement quelques situations que je connaisse!

Pourquoi ne pas utiliser « client » comme identifiant unique. Un identifiant unique ne doit pas être d'un type de valeur.

La réponse à la première question est probablement pas. Le système d'exploitation client pourra choisir un port à partir d'une plage. Même si cette plage est 40-50000 grande, si votre serveur est assez occupé, vous pouvez tôt ou tard le même port venant de différents clients. Si ce n'est pas un serveur bien remplie, vous pouvez avoir de la chance.

Sockets sont différenciés les uns des autres sur la base de paires d'adresse / port / protocole. L'ensemble combiné de ces valeurs du client et le serveur sera unique.

Pourquoi ne pas simplement utiliser l'adresse du client et le port comme un identifiant temporaire?

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