Client/serveur et piece jointe

Soyez le premier à donner votre avis sur cette source.

Vue 14 003 fois - Téléchargée 2 452 fois

Description

Voilà il s'agit de l'évolution de la source Client et Serveur que j'ai déposée il y a quelques jours.
Je ne la mets pas à jour...Je propose ici une nouvelle source car l'évolution est majeure.

Cette applic. permet toujours de communiquer avec les utilisateurs du réseau mais en plus, elle permet de leur transmettre une pièce jointe et ce, QUELLE QUE SOIT SA TAILLE.

La réception est réalisée dans une boucle, pour réécrire le fichier joint en même temps que les paquets sont reçus.
Je transfert donc les informations du fichier par petits paquets de 2048 Octets grâce à la classe BinaryReader qui me permet de récupérer les données binaires...Je réceptionne ces paquets et je les réécris instantanément, cette fois à l'aide de la classe BinaryWriter.

Voilà, il me semble que ça fonctionne très bien...En tous cas avec tous les ordi. de mon réseau...

Laissez moi vos commentaires...

Conclusion :


Je livre dans les sources, une solution intermédiaire qui permet de reconstruire l'exemple avec un fichier PDF très détaillé pour le pas à pas....

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

simoait
Messages postés
1
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
10 juin 2008

bonjour j ai aussi le méme probléme dans jecoute.stop() à l'intérieur de catch. ca debug pas .

merci pour votre aide .
mlabassi
Messages postés
1
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
7 juin 2008

BONJOUR,

Cette application me plait mais ne marche pas chez moi que sans debugging.
En effet il y a apparement un problème dans jecoute.stop() à l'intérieur de catch.

MERCI de me répondre.
Xya
Messages postés
103
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
24 novembre 2005

>> Comme quoi, il est important de coder propre !!

En fait, je crois que le plus important avec .NET c'est que ca peut vraiment t'aider à faire des trucs sympa mais que si tu ne sais pas ce que .NET fait pour toi, ca te peut te prendre par suprise (par exemple ici sur les 1000+ lignes de ton prog, moins de 10 posaient problème pour ses performances, mais changer ce petit nombre de lignes a radicalement changé ses perfs)

>>Merci encore pour ton aide !!

De rien :)
cs_yous
Messages postés
136
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 avril 2009

Comme quoi, il est important de coder propre !! Je modifie donc ces deux lignes...

J'ai récupéré l'utilitaire...que je ne connaissais pas.

Je vais donc bien sûr l'utiliser.

Merci encore pour ton aide !!
Xya
Messages postés
103
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
24 novembre 2005

Une chose à la fois, dans le désordre

>>Et merci particulièrement pour avoir déposé ces deux captures sur ton site perso....

En fait c'est juste un espace de stockage pour moi :)

>>Mais quelles sont elles ces deux lignes de code ???
Voir premier commentaire

byte[] tableau = new Byte[2048];
while(Lecteur.Position<Lecteur.Length)
{
...
Lecteur.Read( tableau, 0, tableau.Length ); //Stream
transmission.Write(tableau,0, tableau.Length);
...
}

dans Form1.cs (lignes 1068-1078 à peu près)

>>Dans le deuxième cas, le fait que System.String prenne autant de ressources vient du fait que tu exploites FileStream au lieu de BinaryReader ? Tu stockes en masse dans un String ?

En fait si on regarde les allocations pour String, on voit que ca vient de String.Concat et de Int64.ToString (http://pasaulais.free.fr/yous_client_3.png) qui viennent probablement de la ligne

etat.Panels[0].Text="Envoyés: " + Lecteur.Position.ToString() + " sur " + Lecteur.Length.ToString();

(En interne C# remplace les concaténations de chaînes avec "+" par String.Concat)

Je pense qu'une des solutions les plus rapides serait de bouger l'appel à Lecteur.Length.ToString hors de la boucle (la taille du fichier ne change pas, ca ne sert à rien d'appeler plusieurs fois ToString dessus) pour gagner vite fait 1,6 Mo de mémoire allouée.

>> En tous cas, merci pour tout l'intérêt que tu portes à cette source, le temps que tu y passes et les enseignements que tu m'apportes.

En fait je travaille sur un projet qui envoie aussi des fichiers sur un réseau (mais juste des fichiers, pas de système de messages), et donc j'ai été confronté y'a vraiment pas longtemps (genre 1-2 semaines) au problème de la mémoire, ce qui m'a amené à utiliser CLRProfiler (qui peut être comme tu as pu le voir très utile et que je te conseille d'utiliser sur tes projets les plus importants, pour avoir l'oeil à ce que fait ton programme en arrière plan). Donc si les problèmes dont je me suis sorti peuvent te faire gagner du temps et améliorer la qualité de ton prog, autant que tu en profites :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.