2010-03-07 12 views
1

Je construis un simple système de discussion client-serveur..Net utilisant Chr() pour analyser le texte

Les clients envoient des données au serveur et le serveur renvoie les données à tous les autres clients. J'utilise les classes de flux TcpListener et Network pour envoyer les données entre le client et le serveur.

Les champs que je dois envoyer sont, par exemple: le nom, le texte, l'horodatage, etc. Je les ai séparés en utilisant le caractère ASCII 29.

J'utilise aussi le caractère ASCII 30 pour marquer la fin de la données en streaming.

Les données sont codées avec UTF8 ..

Est-ce une bonne approche? Vais-je rencontrer des problèmes? Y a-t-il de meilleures méthodes?

MISE À JOUR:

Probablement ma question a été mal compris, je l'expliquer mieux .. Supposons que d'avoir une liste de données à envoyer du client au serveur, et supposons d'envoyer toutes les données dans un seul flux, comment envoyez-vous ces données?

  • L'utilisation d'un balisage
  • En utilisant un caractère comme séparateur
  • En utilisant une longueur fixe pour tous les champs

Répondre

7

Plutôt que de délimiter le texte, je trouve beaucoup plus simple de longueur préfixe messages individuels - donc plutôt que d'écrire

message [TERMINATOR] 

Vous écrire

[LENGTH] message 

(Envoyer la longueur en binaire plutôt qu'en texte - soit un nombre de longueur fixe, par ex. 4 octets, ou un nombre de longueur variable si vous êtes prêt à sacrifier la simplicité pour réduire la taille des données transmises très légèrement.)

Ensuite, il est facile de lire exactement la bonne quantité de données du flux sans se soucier à propos de dépassement dans le prochain message. Le seul inconvénient est que vous devez connaître la longueur du message avant de commencer à l'envoyer, mais je ne pense pas que cela devrait être un problème pour vous dans ce cas. Par ailleurs, UTF-8 est un codant, pas un algorithme de chiffrement.

+0

merci ... et quelle est votre opinion sur l'utilisation du caractère 29 pour séparer les différents champs du même flux? – Marcx

+0

@Marcx: La même chose - j'utiliserais plutôt un préfixe de longueur. –

0

Je pense qu'une autre option pourrait être de sérialiser/désérialiser vos objets et de les envoyer/recevoir en utilisant .NET Remoting. Vous pouvez également crypter vos objets lors de l'envoi et du décryptage lors de la réception.

Dans The Code Project J'ai trouvé un petit exemple avec le code source. Et

+0

Il semble bon, je vais l'essayer merci !! – Marcx