2010-06-22 5 views
1

Lorsque je souhaite recevoir des datagrammes UDP de manière asynchrone, j'écris l'appel BeginReceiveFrom d'une classe System.Net.Sockets.Socket. La méthode BeginReceiveFrom attend un point de terminaison en tant que paramètre remoteEP.Obtention d'un point de terminaison distant pour une réception asynchrone

public IAsyncResult BeginReceiveFrom (
    byte[] buffer, 
    int offset, 
    int size, 
    SocketFlags socketFlags, 
    ref EndPoint remoteEP, 
    AsyncCallback callback, 
    Object state 
) 

Cette méthode commence asynchrone recevoir et ne peut retourner aucun résultat en remoteEP car elle retourne immédiatement. Ce paramètre correspond-il à un type de filtrage ou sera-t-il modifié à la fin de la réception?

Dans le gestionnaire de réception j'appelle EndReceiveFrom, où je dois également passer une référence à un objet Enpoint en tant que paramètre endPoint. Le EndReceiveFrom indique avec cet objet Endpoint l'expéditeur de la trame UDP. Pourquoi dois-je passer un remoteEP au BeginReceiveFrom et puis-je éviter cela?

Répondre

0

Aucune surcharge ne nécessite un point de terminaison, mais cela ne signifie pas que vous devez spécifier des points de terminaison spécifiques. Vous pouvez spécifier n'importe quelle adresse IP en tant que remoteEP.

EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0)); 

EndReceiveFrom attend une passe par la variable ref qui sera renseigné par la méthode elle-même appel. Vous pouvez instancier le point de fin de la même manière. Après l'appel, ignorez simplement la valeur de receivedFromEP si vous n'en avez pas besoin.

+0

Alors, quel est le paramètre remoteEP dans BeginReceiveFrom for? Pourquoi est-ce que je crée un IPEndPoint qui est ignoré de toute façon? – harper

+0

Je n'ai pas de documentation pour fournir une réponse définitive à votre question, peut-être que quelqu'un d'autre le fait. Je suppose que cela a à voir avec la liaison aux interfaces réseau, la sécurité et la convention. Souvent, les applications envoient des données bidirectionnellement, il est donc logique de savoir d'où proviennent les données. Vous aurez probablement plus d'un client ainsi une séparation des données et peut-être même une commande de paquets pourrait être nécessaire (sous-ensembles de la fonctionnalité TCP). Je ne crois pas avoir besoin d'informations sur les clients est plus l'exception à la règle. Il est donc logique de remplir le EndPoint par défaut. –

Questions connexes