begin process at 2012 05 29 14:10:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

PROBLEME CLIENT SERVER


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

PROBLEME CLIENT SERVER

dimanche 13 avril 2003 à 16:06:57 | PROBLEME CLIENT SERVER

zzzzzz

Membre Club
Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(


#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream.h>

int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);

SOCKET sock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(21452);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
char *buf = 0;
while(1)
{
recv(sock,buf,sizeof(buf),0);
int sinsize = sizeof(csin);
if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
cout<<"Client connecter sur le port 21452\n"<<endl;

if (buf = "abcd") {
cout<<"Commande abcd Recu !\n";
}
}
}
return 0;
}
*/
ma syntaxe doit surrement etre fausse la
if (buf = "abcd") {
/*
dimanche 13 avril 2003 à 16:49:27 | Re : PROBLEME CLIENT SERVER

Kaid


- En fait recvfrom() doit te retourner un message d'erreur car tu dois d'abord appeller accept() (Acception d'un client) et ensuite appeller recvfrom() pour récupérer tes données. Si mes souvenirs dans la matière sont bons, accept() te renvois un nouveau socket et c'est ce socket que tu dois passer en paramètre à recvfrom().

- Ensuite il faut allouer de la mémoire pour "buf" soit statiquement, soit dynamiquement. Si tu laisses ton code tel quel ca va planter.

- Oui, buf = "abcd" est archi-faux, c'est une erreur classique de débutant. Pour comparer deux chaines de caractères en c, il faut utiliser la fontion strcmp().

Kaid - kaid.fr.st

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

> Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
> je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
>
>
> #include <winsock2.h>
> #pragma comment(lib,"ws2_32.lib")
> #include <iostream.h>
>
> int main()
> {
> WSADATA WSAData;
> WSAStartup(MAKEWORD(2,0), &WSAData);
>
> SOCKET sock;
> SOCKADDR_IN sin;
> SOCKADDR_IN csin;
>
> sock = socket(AF_INET, SOCK_STREAM, 0);
>
> sin.sin_addr.s_addr = INADDR_ANY;
> sin.sin_family = AF_INET;
> sin.sin_port = htons(21452);
>
> bind(sock, (SOCKADDR *)&sin, sizeof(sin));
> listen(sock, 0);
> char *buf = 0;
> while(1)
> {
> recv(sock,buf,sizeof(buf),0);
> int sinsize = sizeof(csin);
> if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
> {
> cout<<"Client connecter sur le port 21452\n"<<endl;
>
> if (buf = "abcd") {
> cout<<"Commande abcd Recu !\n";
> }
> }
> }
> return 0;
> }
> */
> ma syntaxe doit surrement etre fausse la
> if (buf = "abcd") {
> /*
dimanche 13 avril 2003 à 16:56:58 | Re : PROBLEME CLIENT SERVER

payen

alors l, ca me sembletressimple : ton if n'est pas valide!!! enfin si il l'est, mais la condition est toujours vraie!avec ca, ca risque de mieux marcher : if (buf == "abcd").
toujours 2 signes dans les tests ... (sauf < et >) ...




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

> Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
> je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
>
>
> #include <winsock2.h>
> #pragma comment(lib,"ws2_32.lib")
> #include <iostream.h>
>
> int main()
> {
> WSADATA WSAData;
> WSAStartup(MAKEWORD(2,0), &WSAData);
>
> SOCKET sock;
> SOCKADDR_IN sin;
> SOCKADDR_IN csin;
>
> sock = socket(AF_INET, SOCK_STREAM, 0);
>
> sin.sin_addr.s_addr = INADDR_ANY;
> sin.sin_family = AF_INET;
> sin.sin_port = htons(21452);
>
> bind(sock, (SOCKADDR *)&sin, sizeof(sin));
> listen(sock, 0);
> char *buf = 0;
> while(1)
> {
> recv(sock,buf,sizeof(buf),0);
> int sinsize = sizeof(csin);
> if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
> {
> cout<<"Client connecter sur le port 21452\n"<<endl;
>
> if (buf = "abcd") {
> cout<<"Commande abcd Recu !\n";
> }
> }
> }
> return 0;
> }
> */
> ma syntaxe doit surrement etre fausse la
> if (buf = "abcd") {
> /*
dimanche 13 avril 2003 à 18:33:04 | Re : PROBLEME CLIENT SERVER

zzzzzz

Membre Club
merci a vous 2 je vais voir si j'y arrive deja j'ai ajouter les 2 == et ca me marque plus que la commande abcd a été recue. maintenant je vais essayer de comprendre un peu mieux strcmp(); encore merci !
dimanche 13 avril 2003 à 18:37:55 | Re : PROBLEME CLIENT SERVER

Kaid


C'est une erreur de débutant de tester le contenu d'une chaine de caractères comme tu viens de le faire. Ca marche seulement si buf est un objet et que l'opérateur == a été redéfinie.

Kaid - kaid.fr.st

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

> alors l, ca me sembletressimple : ton if n'est pas valide!!! enfin si il l'est, mais la condition est toujours vraie!avec ca, ca risque de mieux marcher : if (buf == "abcd").
> toujours 2 signes dans les tests ... (sauf < et >) ...
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
> > je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
> >
> >
> > #include <winsock2.h>
> > #pragma comment(lib,"ws2_32.lib")
> > #include <iostream.h>
> >
> > int main()
> > {
> > WSADATA WSAData;
> > WSAStartup(MAKEWORD(2,0), &WSAData);
> >
> > SOCKET sock;
> > SOCKADDR_IN sin;
> > SOCKADDR_IN csin;
> >
> > sock = socket(AF_INET, SOCK_STREAM, 0);
> >
> > sin.sin_addr.s_addr = INADDR_ANY;
> > sin.sin_family = AF_INET;
> > sin.sin_port = htons(21452);
> >
> > bind(sock, (SOCKADDR *)&sin, sizeof(sin));
> > listen(sock, 0);
> > char *buf = 0;
> > while(1)
> > {
> > recv(sock,buf,sizeof(buf),0);
> > int sinsize = sizeof(csin);
> > if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
> > {
> > cout<<"Client connecter sur le port 21452\n"<<endl;
> >
> > if (buf = "abcd") {
> > cout<<"Commande abcd Recu !\n";
> > }
> > }
> > }
> > return 0;
> > }
> > */
> > ma syntaxe doit surrement etre fausse la
> > if (buf = "abcd") {
> > /*
>
dimanche 13 avril 2003 à 18:39:25 | Re : PROBLEME CLIENT SERVER

Kaid

Oublie absolument le if (buf == "abcd"), c'est une erreur, tu es obligé d'utiliser strcmp().

Kaid - kaid.fr.st

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

> merci a vous 2 je vais voir si j'y arrive deja j'ai ajouter les 2 == et ca me marque plus que la commande abcd a été recue. maintenant je vais essayer de comprendre un peu mieux strcmp(); encore merci !
dimanche 13 avril 2003 à 18:57:50 | Re : PROBLEME CLIENT SERVER

zzzzzz

Membre Club
c noter chef :P
dimanche 13 avril 2003 à 19:42:45 | Re : PROBLEME CLIENT SERVER

payen

le petit bout de code suivant tourne bien, et pourtant, c'est du C, donc pas d'objet, ni de surcharge d'operateur :

int main(int argc, char** argv)
{
char* buf = "Bour";

if (buf == "Bonjour")
cout << buf <<endl;
else
cout << "Pas bonjour, mais : " << buf << endl;
getchar();

return 0;
}

si tu veux bien prendre le temps de m'expliquer, moi qui ne manipule jamais les chaines de caracteres. pas debutant ...

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

>
> C'est une erreur de débutant de tester le contenu d'une chaine de caractères comme tu viens de le faire. Ca marche seulement si buf est un objet et que l'opérateur == a été redéfinie.
>
> Kaid - kaid.fr.st
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > alors l, ca me sembletressimple : ton if n'est pas valide!!! enfin si il l'est, mais la condition est toujours vraie!avec ca, ca risque de mieux marcher : if (buf == "abcd").
> > toujours 2 signes dans les tests ... (sauf < et >) ...
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
> > > je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
> > >
> > >
> > > #include <winsock2.h>
> > > #pragma comment(lib,"ws2_32.lib")
> > > #include <iostream.h>
> > >
> > > int main()
> > > {
> > > WSADATA WSAData;
> > > WSAStartup(MAKEWORD(2,0), &WSAData);
> > >
> > > SOCKET sock;
> > > SOCKADDR_IN sin;
> > > SOCKADDR_IN csin;
> > >
> > > sock = socket(AF_INET, SOCK_STREAM, 0);
> > >
> > > sin.sin_addr.s_addr = INADDR_ANY;
> > > sin.sin_family = AF_INET;
> > > sin.sin_port = htons(21452);
> > >
> > > bind(sock, (SOCKADDR *)&sin, sizeof(sin));
> > > listen(sock, 0);
> > > char *buf = 0;
> > > while(1)
> > > {
> > > recv(sock,buf,sizeof(buf),0);
> > > int sinsize = sizeof(csin);
> > > if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
> > > {
> > > cout<<"Client connecter sur le port 21452\n"<<endl;
> > >
> > > if (buf = "abcd") {
> > > cout<<"Commande abcd Recu !\n";
> > > }
> > > }
> > > }
> > > return 0;
> > > }
> > > */
> > > ma syntaxe doit surrement etre fausse la
> > > if (buf = "abcd") {
> > > /*
> >
>
dimanche 13 avril 2003 à 19:50:34 | Re : PROBLEME CLIENT SERVER

payen

le petit bout de code suivant tourne bien, et pourtant, c'est du C, donc pas d'objet, ni de surcharge d'operateur :

int main(int argc, char** argv)
{
char* buf = "Bour";

if (buf == "Bonjour")
cout << buf <<endl;
else
cout << "Pas bonjour, mais : " << buf << endl;
getchar();

return 0;
}

si tu veux bien prendre le temps de m'expliquer, moi qui ne manipule jamais les chaines de caracteres. pas debutant ...

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

>
> C'est une erreur de débutant de tester le contenu d'une chaine de caractères comme tu viens de le faire. Ca marche seulement si buf est un objet et que l'opérateur == a été redéfinie.
>
> Kaid - kaid.fr.st
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > alors l, ca me sembletressimple : ton if n'est pas valide!!! enfin si il l'est, mais la condition est toujours vraie!avec ca, ca risque de mieux marcher : if (buf == "abcd").
> > toujours 2 signes dans les tests ... (sauf < et >) ...
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
> > > je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
> > >
> > >
> > > #include <winsock2.h>
> > > #pragma comment(lib,"ws2_32.lib")
> > > #include <iostream.h>
> > >
> > > int main()
> > > {
> > > WSADATA WSAData;
> > > WSAStartup(MAKEWORD(2,0), &WSAData);
> > >
> > > SOCKET sock;
> > > SOCKADDR_IN sin;
> > > SOCKADDR_IN csin;
> > >
> > > sock = socket(AF_INET, SOCK_STREAM, 0);
> > >
> > > sin.sin_addr.s_addr = INADDR_ANY;
> > > sin.sin_family = AF_INET;
> > > sin.sin_port = htons(21452);
> > >
> > > bind(sock, (SOCKADDR *)&sin, sizeof(sin));
> > > listen(sock, 0);
> > > char *buf = 0;
> > > while(1)
> > > {
> > > recv(sock,buf,sizeof(buf),0);
> > > int sinsize = sizeof(csin);
> > > if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
> > > {
> > > cout<<"Client connecter sur le port 21452\n"<<endl;
> > >
> > > if (buf = "abcd") {
> > > cout<<"Commande abcd Recu !\n";
> > > }
> > > }
> > > }
> > > return 0;
> > > }
> > > */
> > > ma syntaxe doit surrement etre fausse la
> > > if (buf = "abcd") {
> > > /*
> >
>
dimanche 13 avril 2003 à 20:19:01 | Re : PROBLEME CLIENT SERVER

Kaid


En fesant ca, c'est une comparaison entre adresses que fait le compilateur et non une comparaison de chaines. Voici un exemple:

#include <stdlib.h>
#include <string.h>
#include <iostream.h>

int main(int argc, char* argv[])
{
Définition de deux chaines identiques
char* chaine1 = "Bonjour";
char* chaine2 = "Bonjour";

strdup() permet de dupliquer une chaine en mémoire (allocation + copie)
char* chaine3 = strdup("Bonjour");

On n'affiche le contenu et l'adresse des deux premières chaines. Tu remarques que les adresses sont identiques
cout<<"Chaine 1 -"<<chaine1<<"- Adresse: "<<hex<<(long)chaine1<<endl;
cout<<"Chaine 2 -"<<chaine2<<"- Adresse: "<<hex<<(long)chaine2<<endl;

Ca à l'air de fonctionner correctement
if (chaine1 == chaine2)
cout<<"Les adresses sont identiques"<<endl;
else
cout<<"Les adresses sont diffèrentes"<<endl;

On n'affiche le contenu et l'adresse de la troisième chaine. Tu remarques que les chaines sont strictement identiques mais que les adresses sont différentes
cout<<"Chaine 1 -"<<chaine1<<"- Adresse: "<<hex<<(long)chaine1<<endl;
cout<<"Chaine 3 -"<<chaine3<<"- Adresse: "<<hex<<(long)chaine3<<endl;

Voila le problème, la comparaison ne fonctionne pas
if (chaine1 == chaine3)
cout<<"Les adresses sont identiques"<<endl;
else
cout<<"Les adresses sont diffèrentes"<<endl;

Aucun problème avec strcmp()
if (strcmp(chaine1,chaine3)==0)
cout<<"Les chaines sont identiques"<<endl;
else
cout<<"Les chaines sont diffèrentes"<<endl;

return 0;
}

De plus, les deux premières chaines n'ont pas forcément la même adresse, cela dépend des compilateurs. Certains optimisent et regroupent tous les chaines identiques dans un espace mémoire alors que d'autres allouent systématiquement un espace mémoire par chaine.

Kaid - kaid.fr.st

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

> le petit bout de code suivant tourne bien, et pourtant, c'est du C, donc pas d'objet, ni de surcharge d'operateur :
>
> int main(int argc, char** argv)
> {
> char* buf = "Bour";
>
> if (buf == "Bonjour")
> cout << buf <<endl;
> else
> cout << "Pas bonjour, mais : " << buf << endl;
> getchar();
>
> return 0;
> }
>
> si tu veux bien prendre le temps de m'expliquer, moi qui ne manipule jamais les chaines de caracteres. pas debutant ...
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > C'est une erreur de débutant de tester le contenu d'une chaine de caractères comme tu viens de le faire. Ca marche seulement si buf est un objet et que l'opérateur == a été redéfinie.
> >
> > Kaid - kaid.fr.st
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > alors l, ca me sembletressimple : ton if n'est pas valide!!! enfin si il l'est, mais la condition est toujours vraie!avec ca, ca risque de mieux marcher : if (buf == "abcd").
> > > toujours 2 signes dans les tests ... (sauf < et >) ...
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(
> > > > je sais pas comment faire en sorte que si la command = abcd alors j'ecrie Commande abcd Recu ! j'essaye avec recv ca compile bien mais peut importe le message que j'envoie avec mon client ca dit Commande abcd Recu ! meme si j'envoie pas abcd comme commande :(
> > > >
> > > >
> > > > #include <winsock2.h>
> > > > #pragma comment(lib,"ws2_32.lib")
> > > > #include <iostream.h>
> > > >
> > > > int main()
> > > > {
> > > > WSADATA WSAData;
> > > > WSAStartup(MAKEWORD(2,0), &WSAData);
> > > >
> > > > SOCKET sock;
> > > > SOCKADDR_IN sin;
> > > > SOCKADDR_IN csin;
> > > >
> > > > sock = socket(AF_INET, SOCK_STREAM, 0);
> > > >
> > > > sin.sin_addr.s_addr = INADDR_ANY;
> > > > sin.sin_family = AF_INET;
> > > > sin.sin_port = htons(21452);
> > > >
> > > > bind(sock, (SOCKADDR *)&sin, sizeof(sin));
> > > > listen(sock, 0);
> > > > char *buf = 0;
> > > > while(1)
> > > > {
> > > > recv(sock,buf,sizeof(buf),0);
> > > > int sinsize = sizeof(csin);
> > > > if((accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
> > > > {
> > > > cout<<"Client connecter sur le port 21452\n"<<endl;
> > > >
> > > > if (buf = "abcd") {
> > > > cout<<"Commande abcd Recu !\n";
> > > > }
> > > > }
> > > > }
> > > > return 0;
> > > > }
> > > > */
> > > > ma syntaxe doit surrement etre fausse la
> > > > if (buf = "abcd") {
> > > > /*
> > >
> >
>

1 2

Cette discussion est classée dans : client, sin, sock, buf, abcd


Répondre à ce message

Sujets en rapport avec ce message

Prob strcmp(); [ par zzzzzz ] c pour mon server en socket. Jaimerai que quand ya un message envoyer part le client si ce message c abcd ca ecrive Commande abcd Recu ! or je suis pe Probleme sockets de mer** [ par zzzzzz ] bé je suis plus quoi faire j'en suis toujours au meme prob y'en a 1 qui me dit d'utiliser strstr() l'autre strcmp() fin bref ca serrais sympas si quel Probleme de Client Serveur [ par Krox68 ] voila jaimerais faire un programme client qui puisse se connecter a ce serveur : #include void main(){ WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WS client serveur [ par elanspeech ] Bonjour,Je suis en train de programmer un petit client serveur en C pour windows avec dev-c++. J'obtiens l'erreur suivante a la compilation : D:\DEV-C Fiabiliser transfert par socket [ par masseur ] Salut. Je vais vous expliquer mon petit problème. Je crée un client et un serveur. Des que le serveur recoit une demande il envoie un fichier en ut Boucle de connection client TCP [ par ssmint ] Bonjour à tous,Mon dernier souci en date est de pouvoir créer une un client qui essaie de se connecter toutes les secondes.Je fais donc une boucle ave Client serveur [ par fanch314 ] Je que le serveur et le client échange par internet.Le serveur ne voit pas de client connectéEt le buffer du client contient nimporte quoi.En gros ils Problème d'IP Client avec les winsock [ par Cphil51 ] Boujour a tous.Je m'interesse en ce moment aux socket sous windows et j'ai un petit probleme actuellement. J'aimerais savoir comment récupérer l'IP d' Reseaux/Sockets pb client/serveur [ par Rayn3d ] Bonjour tous le monde, j'ai un probleme avec un programme en reseaux client/serveur : lorsque j'envoie un message au client il se decoupe en plusieu erreur serveur multitheard en c [ par dyroj ] salut,j'ai créer un serveur echo en multithread et il marche a moitier sofe que par foi il confon les client.enfin c'est un peut bizare, par exemple q


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,811 sec (4)

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