Accueil > Forum > > > > Problème de sockets...
Problème de sockets...
lundi 26 décembre 2005 à 15:05:02 |
Problème de sockets...

nightlord666
|
Bonjour ! J'essaie en ce moment de programmer un serveur multithread qui servira(peut-être) à un projet de MMORPG. Le serveur fonctionne normalement, la connexion à la base de données aussi, mais c'est au niveau du client que j'ai un problème. Le serveur envoie avec send() la chaine "Bonjour !". Dans le client, on truve ceçi :
char* buffer = new char[255]; recv(soc, buffer, sizeof(buffer), 0); cout << buffer << endl;
Mais au lieu de m'afficher "Bonjour !" comme prévu, il m'affiche une chose assez bizarre, constituée de signes = et ²... Comment pourrais-je résoudre le problème ?
Merci d'avance.
|
|
lundi 26 décembre 2005 à 17:15:49 |
Re : Problème de sockets...

aardman
|
Salut,
Tu dois surement envoyer la chaine sans son \0 final, et comme a la
reception tu ne le rajoute pas, et bien ca t'affiche plein de truc
bizzares..
|
|
lundi 26 décembre 2005 à 18:23:31 |
Re : Problème de sockets...

nightlord666
|
Merci ! C'est vrai, je viens de me rendre compte que j'ai oublié le buffer = {0}... Erreur de ma part. J'espère que ça marchera.
|
|
lundi 26 décembre 2005 à 19:45:51 |
Re : Problème de sockets...

aardman
|
Salut,
Je sais pas trop ce que le buffer = {0} va donner sur un tableau alloué avec new.
J'aurais plutot fait:
int r = recv(...);
buffer[r] = '\0';
|
|
lundi 26 décembre 2005 à 21:35:31 |
Re : Problème de sockets...

nightlord666
|
J'ai essayé de mettre des cout de debuggage, et je me suis rendu compte que à la connexion, l'instruction connect renvoyé une valeur SOCKET_ERROR...
A mon avis le probleme doit venir de la...
Le code est :
cout << "Connexion au serveur..." << endl; char* buffer = new char[255]; WSADATA wsaData; if(WSAStartup(MAKEWORD(2, 0), &wsaData)) { cout << "Impossible de se connecter..." << endl; return 1; }
SOCKET sock; SOCKADDR_IN sin; sin.sin_addr.s_addr = inet_addr("127.0.0.1"); sin.sin_family = AF_INET; sin.sin_port = htons(80); cout << "Création du socket..." << endl; if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { cout << "Erreur de connexion..." << endl; return 1; } if(bind(sock, (SOCKADDR*)&sin, sizeof(sin)) == SOCKET_ERROR) { cout << "Erreur de connexion..." << endl; return 1; } cout << "Rattachement au serveur..." << endl; if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) == SOCKET_ERROR) { cout << "Erreur de connexion..." << endl; return 1; } cout << "Attente du message de bienvenue..." << endl; recv(sock, buffer, sizeof(buffer), 0);
cout << buffer << endl;
if(strcmp(buffer, "Bonjour !")) { cerr << "La chaine a étée mal recue par le client..." << endl; }
Si quelqu'un voit où est l'erreur, ça pourrait surement m'interesser...
|
|
lundi 26 décembre 2005 à 22:31:16 |
Re : Problème de sockets...

aardman
|
Salut,
En fait, tu te bind sur 127.0.0.1:80 et ensuite tu essayes de te
connecter sur cette meme adresse... ce qui est completement absurde!
L'erreur vient peut etre du fait que tu utilises la meme structure
sockaddr_in pour le bind() et le connect() alors que ces 2 adresses ne
representent pas du tout la meme chose (bind=adresse locale,
connect=adresse distante).
De plus, lorsque tu appeles connect() sur un socket, tu n'a pas besoin
de le binder avant, c'est automatique (sauf bien sur, si tu souhaites
toi meme choisir l'adresse locale).
Et enfin, lorsqu'une fonction de winsock retourne SOCKET_ERROR, il faut
appeler WSAGetLastError() pour avoir un numéro d'erreur winsock, et
l'afficher.
|
|
lundi 26 décembre 2005 à 22:33:49 |
Re : Problème de sockets...

cosmobob
|
salut, si tu fais ca: char* buffer = new char[255]; alors sizeof(buffer) vaut 4, c'est a dire la taille d'un pointeur (qui est codé sur 4 octets puisqu'une adresse est representé par un entier) Si tu connais la taille d'un tableau a la compilation (ici c 255), pas la peine de faire une allocation dynamique. fais char buffer[255]; voila un code propre pour recevoir des donnees: char buffer[256]; int r = recv(soc, buffer, sizeof(buffer) - 1, 0); // bien mettre sizeof(buffer)-1 // pour pouvoir placer le 0 terminal sans overflow if (r >= 0) { buffer[r] = 0; cout << buffer << endl; } else cout << "erreur a la reception." << endl; a+ 
|
|
mardi 27 décembre 2005 à 14:59:17 |
Re : Problème de sockets...

nightlord666
|
Ok merci pour tout ! L'erreur du bind vient en fait d'un tutorial que j'avais trouvé sur developpez.com... Par contre, je retrouve toujours la même erreur au connect(), et la fonction WSAGetLastError() me renvoie 10061, qui n'est pas très clair pour moi...
Quelqu'un pourrait-il deja me dire a quoi correspond cette erreur, et comment la corriger ?
|
|
mardi 27 décembre 2005 à 18:04:23 |
Re : Problème de sockets...

nightlord666
|
Je viens de regarder sur la MSDN, et elle me dit ceci sur l'erreur 10061 : que c'est parce que le socket se connecte sur un serveur qui n'existe pas ! Pourtant, j'ai mis des "cout de debuggage" à peu près partout dans le serveur, et il me dit qu'il n'y a aucune erreur...
J'ai aussi essayé autre chose : mon serveur fonctionnant sur le port 80 (decision provisoire bien sur), j'ai fait fonctionner le serveur Apache de EasyPHP en même temps. Et la, EasyPHP me dit que le port est utilisé... Ce n'est pas une preuve que mon serveur marche ?
Je posterais le code source du serveur après, car je dois d'abord modifier les paramètres de connexion MySQL (je ne vais pas vous les donner quand même...).
En espérant que vous pourrez m'aider...
|
|
Cette discussion est classée dans : buffer, problème, serveur, client, sockets
Répondre à ce message
Sujets en rapport avec ce message
probleme serveur-client [ par dorian2031 ]
ben voila le probleme, dans mon serveur-clientmon client envoi bien un message avec : char buffer[1024]="slt a toi\0";.... send(serveur,buffer,1024,
sockets!!!!!!!!!!!!!!! [ par dletozeun ]
bonjour,J'ai encore un probleme avec les sockets:voila, g reussi a faire communiquer un serveur et un client su r 2 ordinateur distant mais cette conn
Sockets asychrones et client serveur TCP [ par argali ]
Bonjour,Est-ce qqun pourrait m'indiquer ou je pourrai trouver un cours complet sur les sockets asynchrones et leurs options (WSAAsyncSelect, FD_ACCEPT
Thread, Client/Serveur VC++.Net et avec WinForms ( pas d'MFC ) [ par lacousine ]
Bonjour,j'ai développé un serveur qui accept plusieurs clients avec des sockets. Voici mes problèmes: lorsque je veux mettre fin à mon serveur et qu'i
problemme avec les sockets [ par sirion ]
Bonjour, j'ai un petit problemme avec les sockets. donc voila, j'ai essayer de faire un serveur/client qui recois 2msg chacun, mais ca merdouille du
Communication Client/Serveur ! Ou es le problème ? [ par QuakeCoder ]
Je recentre fréquemment un problème avec l’utilisation de socket et la communication entre Client/Server. Prenant un exemple de ma dernière appl
Récupérer l'IP du client (SOCKETS) dans une app client/serveur [ par supergrey ]
Bonjour, je voudrais savoir comment récupérer l'IP du client a partir du programme serveur après le sock=accept(...);Merci d'avance !
problème serveur client en C [ par lenneth666 ]
voilà j'ai fais un serveur et un client. Alors pour envoyer un message du serveur vers le client il n'y a aucun problème par contre l'inverse ne march
problème serveur TCP en C [ par lenneth666 ]
Bonjour j'ai essayé de faire un client server TCP en C mais mon serveur bloque a l'instruction suivante : client_socket = accept( ma_socket,(struct
Problème WinSock... [ par Vermifuge ]
Bonjour tout le monde, j'ai une réaction étrange de WinSock, et comme je trouve pas j'ai pensé que quelqu'un avait déjà eu ce problème ( c'est la prem
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|