2010-07-15 31 views
0

Je construis un serveur non bloquant à l'aide du package javas NIO et j'ai quelques questions à propos de la validation des données reçues.Validation des données reçues dans un serveur non bloquant

J'ai remarqué que lorsque j'appelle lire sur un canal de socket, il va essayer de remplir le tampon d'octets qu'il lit (selon la documentation). Quand j'envoie 10 octets au serveur du client, le serveur lira ces dix octets dans le tampon d'octet, le reste des octets dans le tampon d'octet restera à zéro, et le nombre renvoyé par l'opération de lecture sera le la taille de mon tampon d'octets même si le client n'a écrit que 10 octets. Ce que j'essaye de comprendre est s'il y a un moyen d'obtenir juste le nombre d'octets que le client a envoyé au serveur quand le serveur lit d'un canal de douille (dans le cas ci-dessus, 10 au lieu de 1024). Si cela ne fonctionne pas, je sais que je peux séparer toutes les données reçues du client de ces données «excédentaires» stockées dans le tampon d'octets en utilisant des délimiteurs en conjonction avec mes «en-têtes de jeu d'instructions» et quoi d'autre , mais il semble que cela devrait exister donc je dois me demander si je manque quelque chose d'évident, ou s'il y a une raison de bas niveau pour laquelle cela ne peut pas être fait.

Merci :)

Répondre

1

vous ont probablement oublié d'appeler le flip() notoire sur votre tampon.

buffer.clear(); 
channel.read(buffer); 
buffer.flip(); 
// now you can read from the buffer 
buffer.get... 

Je dois changer ma signature à nio.sucks

+0

Ga !! Vous avez raison, je me sens comme un imbécile complet maintenant! Merci – vimalloc