Réception de données sur socket.

cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004 - 22 avril 2003 à 10:20
kokokaoutar Messages postés 13 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 10 juin 2009 - 3 juil. 2005 à 14:00
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.

6 réponses

roswell117 Messages postés 61 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 18 novembre 2005
22 avril 2003 à 10:51
> 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.
0
cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004
22 avril 2003 à 11:03
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 ?
0
roswell117 Messages postés 61 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 18 novembre 2005
22 avril 2003 à 11:35
> 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.
0
cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004
22 avril 2003 à 11:54
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
roswell117 Messages postés 61 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 18 novembre 2005
22 avril 2003 à 12:55
> 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.
0
kokokaoutar Messages postés 13 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 10 juin 2009
3 juil. 2005 à 14:00
merci bien !
0
Rejoignez-nous