begin process at 2012 05 29 15:56:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

Pile des sockets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pile des sockets

mercredi 30 juillet 2003 à 22:15:08 | Pile des sockets

darsh99

Bonjour,

je suis toujours sur mon client serveur et j'ai un petit problème de paquets :

J'envoie des paquets de taille variable mais avec une taille maximum connue de tous les clients et du serveur (actuellement 512 octets). Par exemple j'envoie un paquet de 20 octets puis tout de suite après un paquet de 30, côté réception je lis les paquets avec un buffer de 512 octets.

J'ai 2 problèmes :
d'une part il me remplit le buffer avec les 2 paquets (le 20 + le 30)
d'autre part pendant qu'il est occupé à traiter le recv, l'envoi des autres paquets se termine (j'en envoie en fait une 15aine) pour dépasser finalement les fameux 512 octets, lorsqu'il a terminé de traiter le 1er pack de 512 octets, il retourne au WSAWaitEvent() et bien qu'il reste des paquets à lire, il attend... (j'ai mis l'évènement à auto-reset)

J'avais lu ici un conseil qui disait d'envoyer un paquet puis d'attendre un accusé de réception, mais ça risque de ralentir énormément les transferts :/ (en plus faut mettre un timeout :| ) et je ne suis pas sûr que ça règle le 2nd problème.

Comment dois-je m'y prendre pour contourner ça ? Y'a-t-il moyen de ne lire que vrai paquet par vrai paquet ?
jeudi 31 juillet 2003 à 09:41:07 | Infos supplémentaires

darsh99

Je sais que je n'ai posté qu'hier soir, mais je suis pressé :-), j'ajoute donc quelques infos :

Mes sockets sont en SOCK_STREAM et je travaille sous VC++.

Il doit bien y avoir un moyen de récupérer paquet par paquet et pas tout ce qui loge dans le buffer :/ snif snif
jeudi 31 juillet 2003 à 13:54:10 | Re : Infos supplémentaires

aardman

Membre Club
Salut,
J'ai pas vraiment d'idées pour resoudre ton probleme, mais pourquoi tu tiens tant a recevoir paquet par paquet ?





-------------------------------
Réponse au message :
-------------------------------

> Je sais que je n'ai posté qu'hier soir, mais je suis pressé :-), j'ajoute donc quelques infos :
>
> Mes sockets sont en SOCK_STREAM et je travaille sous VC++.
>
> Il doit bien y avoir un moyen de récupérer paquet par paquet et pas tout ce qui loge dans le buffer :/ snif snif
jeudi 31 juillet 2003 à 14:06:33 | Re : Infos supplémentaires

darsh99

Ce n'est pas tant "recevoir" mais "récupérer" paquet par paquet.

C'est parce que heuuu :)
Sérieusement c'est parce que par exemple mon client demande un groupe de fichiers au serveur, déjà chaque fichier est précédé d'un paquet d'informations sur le fichier (par exemple son emplacement sur le serveur), ce paquet est de taille inférieure à mon buffer de lecture, quand il lit le paquet d'information il embarque avec le début du premier paquet du fichier, c'est quand même très embêtant.


-------------------------------
Réponse au message :
-------------------------------

> Salut,
> J'ai pas vraiment d'idées pour resoudre ton probleme, mais pourquoi tu tiens tant a recevoir paquet par paquet ?
jeudi 31 juillet 2003 à 14:34:22 | Re : Infos supplémentaires

aardman

Membre Club
Salut,
Je pense que le systeme avec accusé de reception dont tu parles plus haut est le meilleur.
Tu envoie un paquet d'info, et tu attend le feu vert du serveur pour commencer a envoyer le fichier lui meme.
Tu pense pas que ca fonctionnerai?

-------------------------------
Réponse au message :
-------------------------------

> Ce n'est pas tant "recevoir" mais "récupérer" paquet par paquet.
>
> C'est parce que heuuu :)
> Sérieusement c'est parce que par exemple mon client demande un groupe de fichiers au serveur, déjà chaque fichier est précédé d'un paquet d'informations sur le fichier (par exemple son emplacement sur le serveur), ce paquet est de taille inférieure à mon buffer de lecture, quand il lit le paquet d'information il embarque avec le début du premier paquet du fichier, c'est quand même très embêtant.
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Salut,
> > J'ai pas vraiment d'idées pour resoudre ton probleme, mais pourquoi tu tiens tant a recevoir paquet par paquet ?
jeudi 31 juillet 2003 à 14:50:03 | Re : Infos supplémentaires

darsh99

> Salut,
Salutations :)

> Je pense que le systeme avec accusé de reception dont tu parles plus haut est le meilleur.
> Tu envoie un paquet d'info, et tu attend le feu vert du serveur pour commencer a envoyer le fichier lui meme.
> Tu pense pas que ca fonctionnerai ?

Je pense aussi, mais j'ai une contrainte de timing, le système d'accusé de réception est bon mais il est lourd, je ne sais pas trop quelle est l'incidence sur la vitesse de transfert, mais mon serveur va envoyer périodiquement des données à au moins un client et le fait de devoir attendre le feu vert du client pour envoyer la suite est beaucoup plus lourd pour lui que de tout envoyer "d'un coup".

Je vais tester avec l'accusé de réception (mais mis seulement aux endroits où c'est nécessaire et non pas à tous les paquets) et voir si c'est acceptable ou même très bien (on ne sait jamais :)).

Merci.
jeudi 31 juillet 2003 à 14:56:22 | Re : Infos supplémentaires

aardman

Membre Club
Salut,
Pour l'accusé de reception, pas besoin de faire un truc enorme. Un accusé de reception d'un octet devrait suffire. (genre un # ou un @).

Niveau timing, si tes fichiers font plus de 512octets, on est plus a 1 octet pret :)


-------------------------------
Réponse au message :
-------------------------------

> > Salut,
> Salutations :)
>
> > Je pense que le systeme avec accusé de reception dont tu parles plus haut est le meilleur.
> > Tu envoie un paquet d'info, et tu attend le feu vert du serveur pour commencer a envoyer le fichier lui meme.
> > Tu pense pas que ca fonctionnerai ?
>
> Je pense aussi, mais j'ai une contrainte de timing, le système d'accusé de réception est bon mais il est lourd, je ne sais pas trop quelle est l'incidence sur la vitesse de transfert, mais mon serveur va envoyer périodiquement des données à au moins un client et le fait de devoir attendre le feu vert du client pour envoyer la suite est beaucoup plus lourd pour lui que de tout envoyer "d'un coup".
>
> Je vais tester avec l'accusé de réception (mais mis seulement aux endroits où c'est nécessaire et non pas à tous les paquets) et voir si c'est acceptable ou même très bien (on ne sait jamais :)).
>
> Merci.
jeudi 31 juillet 2003 à 15:18:24 | Re : Infos supplémentaires

darsh99

> Pour l'accusé de reception, pas besoin de faire un truc enorme. Un accusé de reception d'un octet devrait suffire. (genre un # ou un @).

Oui oui c'était mon intention, j'ai déjà codé les requêtes/réponses avec une liste de code sur le premier octet du paquet, suffit d'en rajouter un :).

> Niveau timing, si tes fichiers font plus de 512octets, on est plus a 1 octet pret :)

Ce n'est pas le transfert de l'octet qui m'inquiète en fait :), c'est surtout qu'il faut attendre que le paquet de 512o soit arrivé + que la réponse revienne.

Pour chaque fichier ça me fait 2 accusés de réception c'est vrai que ce n'est pas énorme (surtout que pour l'instant mon groupe de fichier le plus élevé fait...2 fichier :)). En plus je suppose que sans accusé de réception on peut arriver à bourrer la pile du socket et déclencher un beau lag serveur .

A propos, je peux monter la taille de paquet à combien en local/x-dsl/rtc ?

Je suppose qu'en rtc il ne faut pas dépasser 1ko et pour les deux autres 2 ou 3 ko (sous réserve que le réseau local ne soit pas trop grand (genre avec des vpn de la Hongrie jusqu'à la France au milieu hum)).


Cette discussion est classée dans : envoie, octets, pile, paquet, paquets


Répondre à ce message

Sujets en rapport avec ce message

envoie d'une structure dans une pile [ par Hellboy67 ] je dispose d'une pile que j'ai appelé pune structure que j'ai appelé cases (ci-dessous)struct donnee{ position pos; queue valeur;};la ou sa coince c q Envoie de données [ par ZIHO ] Bonjour, Je developpe une application en C pour communiquer entre deux modules de tansmission sans fils les Zigbee. je dois envoyer d'un module à un Envoie d'octets [ par ZIHO ] Bonjour, je dois rendre un programme ecrit en C le Lundi. En Gros, je reçois une commande de 8 octets et donc mon travaille est : 1- Renvoyer chaqu Récupération et réencodage de packet d'un serveur [ par mic1331 ] Tout d'abord bonjour à la communauté ! Donc j'explique ma venu ici. En gros, je cherche à récupéré les paquet envoyer par mon serveur de jeu qui sont Augmenter la taille d'une pile [ par ssana83 ] Bonsoir, comment je peux augmenter la taille d'une pile en visual c++ pour éviter le problème de débordement de pile. Merci. envoie et reception des données sur rs232 vers pic [ par marmouraa ] Slt tout le monde, je suis entrain de faire un projet de fin d'études dans lequel j'ai besoin d'une communication rs232. je veux envoyer une code( par distribuer des cartes [ par korin221 ] Bonjour! Je réaliser un jeux de UNO en C. J'ai réaliser un pile dynamique ( utiliser pour les cartes ) Je voudrais savoir si cette méthode est utile ? pile dynamique [ par korin221 ] Bonjour! Voila j'ai un problème. Je voudrais mélanger ma pile dynamique de façon aléatoire. Peut on directement mélanger la pile ou alors passer la pi C++?/ Problème pour recevoir des octets dans un tableau [ par LiaGalanodel ] Bonjour a tous. Je suis une grande débutante en c++ et je me heurte a un problème. Voila, je dois faire un programme de socket. J'utilise pour cela Detection de formes [ par blastrame ] Bonjour, J'aurais besoin de votre aide pour détecter la forme rectangle, triangle et rond car mon code fonctionne actuellement avec un nombre de pixe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,451 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales