Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Compression des flux et StreamReader [ Réseau & Internet / Client - Serveur ] (maitredede)

jeudi 27 mars 2008 à 15:00:11 | Compression des flux et StreamReader

maitredede

Membre Club
Bonjour,

Je suis en train de coder une librairie de client/serveur pour un protocole assimilé à telnet. En gros, l'utilisateur se connecte avec telnet au serveur, il saisis des commandes au clavier, le serveur lui renvoie une réponse.
Concrètement :
 - le serveur c'est un TcpListener qui génère des TcpClient, on récupère le flux (GetStream), on y met un streamreader et un streamwriter.
 - côté client, un TcpClient qui se connecte, un StreamReader et un StreamWriter sur le flux.

Là où ça pose problème, c'est pour activer un mode compressé, qui n'est autre q'une compression GZip du flux réseau.
En gros, avant :

Serveur [StreamReader/StreamWriter] =<=>= [NetworkStream] =<=>= ... Internet ... =<=>= [NetworkStream] =<=>= [StreamReader/StreamWriter] Client

Après
Serveur [StreamWriter] =>= [GZipStream(compress)] =>= [NetworkStream] =<=>= ... Internet ...
             [StreamReader] =<= [GZipStream(decompress)] =<= [NetworkStream] =<=>= ... Internet ...
(symétrique coté client)

Avec ce fonctionnement, les ReadLine des StreamReader bloquent des deux côtés... une idée ?


Sinon, comment faire pour garder les StreamReader tout en compressant le flux ?

vendredi 28 mars 2008 à 12:31:17 | Re : Compression des flux et StreamReader

taupe4

Il faut que tu décompresses et compresses dans des flux auxiliaires, tels qu'un MemoryStream. Tu envoies ensuite ces bytes, avec préalablement la taille des données à recevoir de l'autre côté (bah oui il doit savoir en clair quel est la taille des données compressées).

[StreamWriter] => [GZipStream(Compress)] =>[MemoryStream]
[MemoryStream] -> [NetworkStream]

[NetworkStream] -> [MemoryStream]
[MemoryStream] <= GZipStream(Decompress)] <= [StreamReader].

L'utilisation ici des BinaryWriter et BinaryReader est nettement plus conseillée, car elle est plus souple et plus simple à mettre en place.

Attention, les outils Microsoft sont terriblement inefficaces. N'essaie pas de compresser un fichier sauf si avec un vrai compresseur il aurait un taux de compression d'au moins 50%.

vendredi 28 mars 2008 à 14:00:33 | Re : Compression des flux et StreamReader

maitredede

Membre Club
En fait, le but n'est pas de faire de la compression de fichiers...
Le but est de passer d'un flux tcp en texte clair (un flux telnet) vers un flux compressé pour que la bande passante utilisée soit réduite.

Une première solution consisterai à effectivement passer par un mécanisme de compression en mémoire, mais pas que...

A mon avis, je vais encore devoir me bricoler un truc à la "pas propre" pour arriver à faire ce que je veux...

Pourquoi  ce monde n'est pas parfait ?



Cette discussion est classé dans : serveur, flux, streamreader, streamwriter, compression


Répondre à ce message

Sujets en rapport avec ce message

Stream Reader/Writer Serveur [ par kiboumz ] Bonjour,Je fais une application réseau où des informations s'échangent entre l'application client et l'application serveur. Pour ce faire, j'utilise u client/serveur [ par OxN ] Bonjour je souhaterai créer un client qui se connecte, envoi une chaine de caractères, et se deconnecte, tout en cliquant sur un bouton. Et un serveur StreamWriter : respecte pas l'encodage [ par vangou_be ] Salut !Je dois faire une fonction qui lit un fichier CSV et en supprime une ligne données.Je lis le fichier ligne par ligne et je le recopie (sauf la Appli Serv/Client | deux methodes differentes : problemes [ par ChamY ] Bonjour,je suis en train de creer une appli type serveur/client.J'utilise une methode differente pour la creation du client et du serveur.Le serveur : Streamreader Savoir si de l'information doit être lu [ par kiboumz ] Bonjour,Je suis entrain de faire une application où des informations s'échangent entre le client et le serveur et j'utilise pour cela un streamreader Panel => recuperer image [ par sheorogath ] bonjour a tous ,je voulais recuperer le flux d'une webcam et j'ai reussi a le faire grace a dshownetje voulais capturer le flux video a intervalle reg Comment Créer un serveur POP [ par MrContent ] Salut !Je cherche à développer un serveur POP (et son client)...J'ai trouver pas mal d'infos pour me connecter à un serveur POP mais pas pour en créer Savoir lorsque quelqu'un s'abonne à un évènement? [ par fcolo ] Bonjour,je réalise une application de capture de flux vidéo de caméra IP.J'ai un processus de capture du flux qui envois au travers d'un evenement l'i Ecrire un fichier texte, sans rajout d'octets... [ par benjiiim94 ] Bonjour !J'ai un problème tout bête mais surprenant.Lorsque j'utilise un streamwriter pour créer un fichier texte tout simple, avec ce code par exempl Programmer avec C#, Access et mettre la BDD sur un serveur [ par sandra26 ] Bonjour, je voudrais savoir s'il est possible de programmer avec access et de mettre la bdd sur un serveur?si oui comment?Je voudrais aussi savoir com


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,061 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.