CONNECTION CLIENT SERVEUR AVEC WINSOCK SANS MFC

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
- - Dernière réponse : thimafa
Messages postés
2
Date d'inscription
samedi 10 décembre 2005
Statut
Membre
Dernière intervention
15 octobre 2006
- 15 oct. 2006 à 23:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27390-connection-client-serveur-avec-winsock-sans-mfc

Afficher la suite 
cs_aardman
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2 -
Salut,
Coté serveur, il faut envoyer strlen(buffer)+1 octets, et non pas sizeof(buffer) octets.. il faut envoyer seulement ce qui est utile.
Spiffou
Messages postés
100
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
9 juin 2014
-
C'est juste merci pour la rque, je corrige le code.
Il faut quand même dire que étant donné la nature du prog, (qui sert uniquement de tuto) le côté optimisation n'est pas primordial, mais autant prendre les bonnes habotudes deès le début...
cosmobob
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
3 -
salut,
tu peux meme n'envoyer que strlen(buffer) octets pour le serveur, le 0 de fin de chaine etant un poil inutile.
tu devrais du coup modifier le client car en faisant:
recv(C_socket, buffer, sizeof(buffer),0);
printf("%s\n",buffer);
tu supposes que le serveur t'envoie des données qui finissent par 0 (sinon ca affiche n'importe quoi (enfin ca va afficher des caracteres supplementaires)).
il ne faut en fait jamais faire ce genre de supposition, car par exemple, la chaine envoyée par le serveur peut avoir été coupée en deux (si elle est longue notamment, si le traffic internet est surchargé, etc...; ca dépend de parametres exterieurs au programme et qui peuvent conduire a ca)

je te conseille de faire:

int r = recv(C_socket, buffer, sizeof(buffer) - 1,0);
// c'est bien sizeof(buffer) - 1 !! cela assure que
// r est soit négatif (erreur) soit entre 0 et sizeof(buffer)-1
if (r >= 0)
{
// donc on peut faire ca sans craindre un débordement
// d'indice.
buffer[r] = 0; // on place un 0 a la fin des données recues.
printf("%s\n",buffer);
}
else
{
printf("erreur lors de la reception\n");
// il y a eu une erreur, à traiter...
}

et voila...

a++ ;)
Spiffou
Messages postés
100
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
9 juin 2014
-
ah oui pas mal j'y avait pas pensé, et en plus je l'ai jamais vu dans les sources que j'ai consulté....

j vais essayer de faire la modif demain, par ctre comme tu l'as dit c surtout intéressant quand les chaines sont longues, et dans notre cas y'a peu de chance qu'elles soient coupées.
Mais une fois de plus:
autant prendre les bonnes habotudes deès le début...

merci pour la rque
(c fou ce que ca evolue un soft avec les conseils des autres...)
CptLuthor
Messages postés
25
Date d'inscription
dimanche 7 novembre 2004
Statut
Membre
Dernière intervention
9 décembre 2004
-
Salut

- je voudrai creer un server et un client VPN en language C ou C++ (
je mi connai un pe en C )
- un .exe qui lance le server et un point .exe qui lance le client , le
client étant le pc dun pot qui habite pas chez moi, on a tous l adsl.
- le server doit pouvoir accepter plusieurs client en meme tps.
- une foi connecter on doit pouvoir se voir en réseau, c a d que par
exemple si je lance un jeu et que je créé un partie réseau local , le
client doit pouvoir joindre la partie créé par le server. ( quand on
utilise le VPN de windows XP ca marche mais le sever XP naccepte que 1
client en meme tps)
- tous ce qui é convivialité, graphic , etc... je men occuperai, dabord je ve juste le truc le + basic. merci a+