8
votes

Comment connaître le numéro de port utilisé par C # udpclient?

Je crée une application serveur cliente à l'aide de C Sharp. Le serveur utilise TCplistener avec un numéro de port fixe. Le client se connecte au serveur en utilisant tcpclient. Une fois connecté, le client et le serveur communiquent à l'aide de cette connexion. L'application crée ensuite une nouvelle connexion UDP pour envoyer et recevoir un message. Étant donné que le serveur suppose accepter une connexion multiple à partir du client unique, je dois différencier chaque connexion avec un port différent. Pour ce faire, je dois d'abord 1. Au serveur, créez un udpclient (utilisez automatiquement un port UDP inutilisé sur le serveur). 2. Envoie le numéro de port utilisé par le serveur udpclient sur le client. 3. Le client envoie des données au serveur à l'aide du numéro de port spécifié.

Le problème est, comment créer un udpclient où vous pouvez connaître le numéro de port utilisé?


0 commentaires

3 Réponses :


0
votes

Je pense que vous ne pouvez pas utiliser UdpClient au niveau du serveur pour atteindre votre objectif, car il ne dispose pas d'une méthode de liaison pour se lier à un iPendPoint.

Vous devez utiliser un objet de socket pour le faire, ce qui vous permet de surveiller un port pour les messages UDP entrants. Alors aucun doute, vous pouvez dire au client que le port du serveur est surveillé.


0 commentaires

2
votes

Je pense que vous pouvez utiliser le Prise. Propriété RemoteCoint Pour savoir ce que le port IP / Port du client connecté au serveur est (vous connaissez votre IP / port local car vous avez démarré la prise sur ce port, mais elle est également disponible via la propriété localendpoint.

Voir également le MSDN UDPCLIENT pour Un exemple simple sur la manière d'utiliser correctement l'UDPCLIent.


0 commentaires

18
votes

Voici la réponse à mes questions.

UdpClient udpClient = new UdpClient(0));
Console.WriteLine("UDP port : " + ((IPEndPoint)udpClient.Client.LocalEndPoint).Port.ToString());


2 commentaires

Malheureusement, au moins dans .NET 4.0, le système ne définit jamais le champ de port d'une prise UDP. Et comme il s'agit d'une propriété simple, vous ne pouvez pas la définir manuellement non plus.


OUPS. J'aurais dû dire: le système ne définit pas le port sur les prises brutes UDP lorsque vous liez. Il fait sur des sockets DGRAM.