begin process at 2012 05 30 11:16:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

Réception de données sur socket.


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

Réception de données sur socket.

mardi 22 avril 2003 à 10:20:53 | Réception de données sur socket.

julien20vt

Bonjour,

J'ai un doute concernant l'utilisation de sockets.
Si coté serveur j'utilise un buffer de taille X pour lire sur ma socket, ce serveur reste en attente tant qu'il n'a pas lu exactement X octets, c'est ca ?

Donc si coté client j'ai également un buffer de taille X pour lire dans un fichier et envoyer les données sur cette socket, tout se passe bien sauf pour le dernier "morceau" de données à envoyer, car il ne fera certainement pas X octets cette fois.

Comment faire pour que le serveur ne reste pas bloqué en attendant d'autres données si je n'ai plus rien à lui envoyer ?

Merci.
mardi 22 avril 2003 à 10:51:07 | Re : Réception de données sur socket.

roswell117

> Bonjour,
Bonjour à toi

> J'ai un doute concernant l'utilisation de sockets.
> Si coté serveur j'utilise un buffer de taille X pour lire sur ma socket, ce serveur reste en attente tant qu'il n'a pas lu exactement X octets, c'est ca ?


non, le serveur va attendre des paquets que tu vas ranger dans un buffer de taille X.

memset(buffer,0,sizeof(buffer));
(sock,buffer,sizeof(buffer),0);


en fait, le serveur va rester en attente tant qu'il ne recoit pas de paquets (avec une boucle while après le listen).

> Donc si coté client j'ai également un buffer de taille X pour lire dans un fichier et envoyer les données sur cette socket, tout se passe bien sauf pour le dernier "morceau" de données à envoyer, car il ne fera certainement pas X octets cette fois.

Donc tout se passera bien, même pour le dernier "morceau" de données

> Comment faire pour que le serveur ne reste pas bloqué en attendant d'autres données si je n'ai plus rien à lui envoyer ?

si tu n'as plus rien à envoyer, ferme ton socket.

> Merci.
si la réponse te convient, alors de rien, sinon précises un peu plus.
mardi 22 avril 2003 à 11:03:41 | Re : Réception de données sur socket.

julien20vt

La réponse me convient merci.

Si j'ai bien saisi alors, le serveur recoit un paquet d'une taille inférieure ou égale à celle de mon buffer qui recoit les données.

Mon buffer peut donc très bien avoir une structure particulière, cad que si je sais que j'envoie une structure de type Ma_struct défini plus tôt dans mon programme, je peux très bien coté serveur récupérer les données directement dans un buffer de type Ma_struct ?




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

> > Bonjour,
> Bonjour à toi
>
> > J'ai un doute concernant l'utilisation de sockets.
> > Si coté serveur j'utilise un buffer de taille X pour lire sur ma socket, ce serveur reste en attente tant qu'il n'a pas lu exactement X octets, c'est ca ?

>
> non, le serveur va attendre des paquets que tu vas ranger dans un buffer de taille X.
>
> memset(buffer,0,sizeof(buffer));
> (sock,buffer,sizeof(buffer),0);

>
> en fait, le serveur va rester en attente tant qu'il ne recoit pas de paquets (avec une boucle while après le listen).
>
> > Donc si coté client j'ai également un buffer de taille X pour lire dans un fichier et envoyer les données sur cette socket, tout se passe bien sauf pour le dernier "morceau" de données à envoyer, car il ne fera certainement pas X octets cette fois.
>
> Donc tout se passera bien, même pour le dernier "morceau" de données
>
> > Comment faire pour que le serveur ne reste pas bloqué en attendant d'autres données si je n'ai plus rien à lui envoyer ?
>
> si tu n'as plus rien à envoyer, ferme ton socket.
>
> > Merci.
> si la réponse te convient, alors de rien, sinon précises un peu plus.
mardi 22 avril 2003 à 11:35:02 | Re : Réception de données sur socket.

roswell117

> La réponse me convient merci.
Super, j'ai fait un heureux !!!

> Si j'ai bien saisi alors, le serveur recoit un paquet d'une taille inférieure ou égale à celle de mon buffer qui recoit les données.

Le serveur recoit un paquet de données et c à toi d'adapter la taille du buffer. Si tu envoie des données de taille X, ton buffer doit avoir une taille de X au minimum.

> Mon buffer peut donc très bien avoir une structure particulière, cad que si je sais que j'envoie une structure de type Ma_struct défini plus tôt dans mon programme, je peux très bien coté serveur récupérer les données directement dans un buffer de type Ma_struct ?

Je ne penses pas car quand tu recoit les données par
(sock,buffer,sizeof(buffer),0);
et buffer est de type char.
Je ne sait pas comment tu pourrait te débrouiller pour l'obtenir directement, ou sinon, utilises des délimiteurs entres les différentes variables de ta structure.
mardi 22 avril 2003 à 11:54:07 | Re : Réception de données sur socket.

julien20vt

Ce qu'il y a de sur c'est que ca marche en C, j'ai dejà eu l'occasion de le faire cette année, donc en je vais tester en C++ pour voir ce que ca donne.

Un autre question : Est-ce qu'on est limité en tailler pour l'envoi d'un paquet sur la socket ? si je veux envoyer un buffer de 5Mo est-ce que ca passe ?



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

> > La réponse me convient merci.
> Super, j'ai fait un heureux !!!
>
> > Si j'ai bien saisi alors, le serveur recoit un paquet d'une taille inférieure ou égale à celle de mon buffer qui recoit les données.
>
> Le serveur recoit un paquet de données et c à toi d'adapter la taille du buffer. Si tu envoie des données de taille X, ton buffer doit avoir une taille de X au minimum.
>
> > Mon buffer peut donc très bien avoir une structure particulière, cad que si je sais que j'envoie une structure de type Ma_struct défini plus tôt dans mon programme, je peux très bien coté serveur récupérer les données directement dans un buffer de type Ma_struct ?
>
> Je ne penses pas car quand tu recoit les données par
> (sock,buffer,sizeof(buffer),0);
> et buffer est de type char.
> Je ne sait pas comment tu pourrait te débrouiller pour l'obtenir directement, ou sinon, utilises des délimiteurs entres les différentes variables de ta structure.
mardi 22 avril 2003 à 12:55:43 | Re : Réception de données sur socket.

roswell117

> Un autre question : Est-ce qu'on est limité en tailler pour l'envoi d'un paquet sur la socket ? si je veux envoyer un buffer de 5Mo est-ce que ca passe ?

Je sais que le paquet est limité en taille (1524 octets je crois), mais je ne sais pas ce qui va se passer au niveau de l'envoi et de la réception, est-ce qu'il va tout fragmenter et reconstruire ?
Le plus simple étant de découper ton buffer à la taille maximale d'un paquet et d'ensuite envoyer les paquets les uns à la suite des autres. A la réception, il reste plus qu'à recoller les bouts dans le bon ordre.
Sinon, je peut pas te dire ce qu'il va faire, fait un essai en envoyant 1Mo, si ca passe c bon, sinon essaye ce qui est plus haut.
dimanche 3 juillet 2005 à 14:00:16 | Re : Réception de données sur socket.

kokokaoutar



merci bien !



Cette discussion est classée dans : données, serveur, envoyer, socket, réception


Répondre à ce message

Sujets en rapport avec ce message

Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres Envoyer et recevoir un fichier par Socket en C [ par coolboy78 ] Bonjour,j'aimerai Envoyer et recevoir un fichier par Socket en C. Mais je n'ai pas trouvé de fonction ni d'exemple pour ceci.Si kelkun pouvez maider, bind bought bought lier [ par JoebarGlut ] Salut, j'ai un piti problem de bind, kelkun peut il m'eclairer ?j'explik : (c'est un client qui se metamorphose en serveur ou en client suivant ce qu' J'arrive pas à recevoir (C++) [ par lukilou ] Salut, j'ai un petit problème pour la réception d'info mais j'arrive bien à envoyer.Je passe la déclaration du socket etc car ca fonctionne.listen(soc sockets: méthode accept() [ par julien20vt ] Voila,je viens de coder le serveur de ma socket et ce qui me parait etrange c'est que la méthode accept() n'est pas bloquante, je pensais que le serve encore mon serveur [ par skysee ] bonjour,je suis toujours avec mon serveur en c sous visual c++ sous windows(sis eulement j'avais linux).Le problème est que je n'ai pas d'erreur de co Problème d'envoie par socket [ par CyberP ] J'ai fait un programme qui se connecte à un serveur ftp (le serveur ftp est aussi sur mon ordi). Je me connecte avec la fonction connect() et je recoi Tutorial - Socket, serveur, client BCPP + GUI [ par NyxArm ] Bonjours tout le monde, je suis présentement en période d'appretissage du language CPP sur Borland(v.6). Maintenant que j'ai acquis quelque conna socket et fichiers textes : HELP !! [ par ben01n ] Salut tout le monde !je prog actuellement un client serveur en udp multicast sous linux (voir source sur ce site) et j'aimerais que mon serveur envoi pb connetion reseau multiutilisateurs [ par JRB ] lorsque l'on veut creer une connection reseau ou plusieurs clients peuvent se connecter sur le meme serveur, est ce que le serveur doit creer un socke


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 0,577 sec (3)

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