Netty - UDP serveur
Je vais avoir une UDP Netty serveur. Il a un SimpleChannelUpstreamHandler
pipeline où je remplace la messageReceived
méthode.
J'ai besoin d'écrire de nouveau quelques informations maintenant et puis. Je ne peut le faire qu'en utilisant le support de l'information à partir de MessageEvent.getRemoteAddress()
, et le canal de MessageEvent.getChannel()
. Afin d'être en mesure de réutiliser cette information, je garde à dans un mappage statique.
Ce qui se transforme en MessageEvent.getChannel().write("foo", MessageEvent.getRemoteAddress());
Ce que je m'attendais a avoir MessageEvent.getChannel().getRemoteAddress()
de travail, ce qui n'est pas le cas. Il me donne toujours null
.
- Je fais quelque chose de mal ?
- Est-il un meilleur moyen pour l'écriture de dos que de garder le canal et l'adresse distante dans certains états ?
OriginalL'auteur thelost | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
lors de l'utilisation de UDP (Datagramme) canal comme un serveur de canal, vous ne le lier à une adresse locale et qu'aucune connexion n'est faite. c'est pourquoi il n'est pas à distance de l'adresse associée à la chaîne et vous obtenez toujours des
null
lors de l'appel deMessageEvent.getChannel().getRemoteAddress()
. ce comportement est normal et correct. la même UDP "serveur" de canal gère toutes les demandes des clients.lors de l'utilisation de UDP canal en tant que client de canal, on peut créer une "connexion" en reliant le canal à une distance de l'adresse. dans ce cas, le canal aura une configurés à distance de l'adresse (même si aucune connexion n'est faite) et en appelant
MessageEvent.getChannel().getRemoteAddress()
sera de retour la configuration à distance de l'adresse.la connexion UDP canal empêche l'utilisateur d'utiliser le canal pour envoyer des données à des télécommandes adresses autres que celui configuré sur le canal. essayer de le faire se lever une exception. la connexion d'un client canal est facultatif en UDP, un client peut fonctionner correctement avec un canal qui n'est appliqué sur une adresse locale, tant qu'il enregistre l'adresse distante.
Je pense que vous avez deux options:
Je crois que la première option est préférable.
OriginalL'auteur Yoav Slomka
Comme vous le savez probablement UDP est une connexion de transport. Un seul canal peut recevoir des données, et l'écriture de données d'adresse de destination. Par conséquent, une UDP canal ne sont pas associés à une adresse à distance dans la façon dont un canal TCP. Alors que je pense qu'il est possible d'obtenir netty pour associer une UDP canal avec une adresse distante, je n'ai pas les détails à la main et, pour être honnête, je pense avoir l'adresse de l'événement de message est la meilleure option.
Cela nous amène à votre deuxième question, oui, vous aurez besoin de garder la télécommande à l'adresse quelque part. Je n'ai pas fait de la programmation en UDP Netty donc je ne sais pas si vous avez besoin de mapper l'adresse distante à un canal d'objet, ou si Netty est toujours retourner le même canal de l'objet indépendamment. Il vaut la peine de vérifier ce que vous pouvez seulement besoin de garder une référence unique à la chaîne.
OriginalL'auteur johnstlr
1) jetez un oeil à ce UDP en amont de gestionnaire. Pour obtenir la distance de l'adresse de l'expéditeur, vous pouvez utiliser le code suivant
SocketAddress remoteAddress = datagramPacket.sender();
2) Quels @johnstlr mentionné est droit, il n'est pas correct pour associer une UDP canal avec une seule adresse distante. Mais vous pouvez l'utiliser en même temps une table de hachage pour faire des recherches, comme indiqué dans le fichier ci-dessus. Cette serveur de jeu utilise les sessions qui ont à la fois des connexions TCP et UDP. Cela rend plus facile pour envoyer des données fiables sur TCP et toutes les données de la trame UDP.
OriginalL'auteur Abe