2010-08-16 7 views
0

J'ai un serveur C# qui accepte plusieurs clients et plusieurs messages de chaque client.C# ==> Tampon de lecture Asyncsocket?

1- Pour commencer à lire depuis chaque client, j'ai besoin de passer un tampon (octets), mais le problème est que je ne sais pas combien de données le client va envoyer. Donc, y a-t-il un moyen de savoir combien de données un client va envoyer pour que je puisse commencer à lire pour la quantité de données correcte?

2- Est-ce OK si j'utilise seulement un tableau de 1 octet pour lire tous les clients? ou ai-je besoin de créer un tableau d'octets pour la lecture de chaque client?

Répondre

2
  1. À moins que votre protocole ne dicte la quantité de données à envoyer, non. En règle générale, vous lisez une valeur de tampon, puis potentiellement lire plus. Cela dépendra cependant vraiment du protocole. Si le client ne peut envoyer qu'un seul message sur chaque connexion, vous continuerez généralement à lire jusqu'à ce que l'appel suivant renvoie 0 octet. Sinon, les messages ont des délimiteurs ou un préfixe de longueur. Absolument pas - en supposant que vous liriez plusieurs clients simultanément (sinon pourquoi utiliseriez-vous des communications asynchrones?) Vous obtiendriez que les données des différents clients soient écrites les unes sur les autres. Créez un nouveau tableau d'octets pour chaque client. En fonction de ce que vous faites avec les données, peut être capable de réutiliser le même tableau d'octets pour la prochaine lecture pour le même client - et vous pouvez réutiliser le tableau d'octets pour les clients plus tard, si vous voulez vraiment ... mais don pas lu à partir de plusieurs clients en même temps dans le même tampon.

0

Ainsi est-il un moyen de savoir combien de données un client va envoyer afin que je puisse commencer à lire pour la bonne quantité de données?

Tout protocole doit disposer d'un mécanisme pour un client pour indiquer quand il est fait d'envoyer des données, soit en tant que valeur de « longueur » qui est envoyé avant les données réelles, ou comme une séquence de terminaison spécial qui est envoyé après les données.

Est-il OK si j'utilise seulement un tableau de 1 octet pour lire tous les clients? ou ai-je besoin de créer un tableau d'octets pour la lecture de chaque client?

Dépend du fonctionnement de votre programme. Si vous avez plusieurs clients simultanés, il est évident que vous ne pouvez pas avoir un seul tampon car ils finiront par s'écraser l'un l'autre. Si c'est un client après l'autre, mais seulement un à la fois, il n'y a aucun problème à avoir un seul tampon.