Accueil > Forum > > > > Liaison client/serveur (socket)
Liaison client/serveur (socket)
samedi 13 novembre 2004 à 19:16:29 |
Liaison client/serveur (socket)

bthivent
|
Bonjour ! J'ai suivi un tutorial pour apprendre les sockets. J'ai ensuite essaiyé un exemple qu'ils proposaient, voici mon code qui permet de faire un serveur, et d'envoyer un message à ceux qui s'y connectent : WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKET csock; 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(23); bind(sock, (SOCKADDR *)&sin, sizeof(sin)); listen(sock, 0); cout << "Serveur en route..."; while(1) { int sinsize = sizeof(csin); if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET) { send(csock, "Bienvenue chez moi !\r\n", 14, 0); } } |
Je ne sais pas si ca marche, et j'ai donc voulu tester en créant un prog qui se connecte sur mon pc, le code client : char addrip[30]; cout << "Adresse ip du serveur ?"; cin >> addrip; cout << "Nous allons tenter une connection au serveur : " << addrip << endl; WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKADDR_IN sin; sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr(addrip); sin.sin_family = AF_INET; sin.sin_port = htons(4148); bind(sock, (SOCKADDR *)&sin, sizeof(sin)); connect(sock, (SOCKADDR *)&sin, sizeof(sin)); |
Mais dès que je me connecte (si je me connecte) en rentrant mon adresse ip de réseau local, je n'obtient aucun message.. Mon code semble pourtant bon ? Mais il doit manquer quelquechose... Enfin voilà, merci pour votre aide ! bthivent, jeune programmeur c++ dans ses débuts 
|
|
samedi 13 novembre 2004 à 19:20:20 |
Re : Liaison client/serveur (socket)

bthivent
|
Euh j'ai oublié de parlé du plus important lol.. Il faut que j'utilise un port, car on entre mon adresse ip, mais je ne sais pas quel est le port pour pouvoir accéder a mon ordi. voilà.. @++ bthivent, jeune programmeur c++ dans ses débuts 
|
|
samedi 13 novembre 2004 à 19:44:17 |
Re : Liaison client/serveur (socket)

aardman
|
Salut, Ton serveur ecouter sur le port 23, et tu essayes de te connecter au port 4148..
|
|
samedi 13 novembre 2004 à 20:31:16 |
Re : Liaison client/serveur (socket)

bthivent
|
Merci ! j'ai essayé de mettre les deux à 4148, et ça marche pas... j'ai essayé avec les deux a 23 et ca marche pas non plus... que faire ? bthivent, jeune programmeur c++ dans ses débuts 
|
|
samedi 13 novembre 2004 à 20:56:39 |
Re : Liaison client/serveur (socket)

aardman
|
Salut, Coté client, on ne doit pas appeler bind(...). C'est connect(...) qui choisi le port local implicitement. Ici ton client et ton serveur essayent de binder sur le meme port, ca peut peut etre poser probleme.
Sinon tu n'a pas mis de traitement d'erreur dans ton code, pas tres pratique pour débuger, donc pour chaque fonction il faut tester sa valeur de retour (SOCKET_ERROR ou non) et si une fonction retourne SOCKET_ERROR, il faut appeler WSAGetLastError() et afficher le numéro de l'erreur.
|
|
samedi 13 novembre 2004 à 21:53:46 |
Re : Liaison client/serveur (socket)

bthivent
|
Donc je dois enlever le bind du client.. ? et comment utiliser SOCKET_ERROR ? Je le met dans chaque fonction que j'utilise pour créer le socket (par fonction(machin machin != SOCKET_ERROR)je crois ?) ?? bthivent, jeune programmeur c++ dans ses débuts 
|
|
samedi 13 novembre 2004 à 22:01:38 |
Re : Liaison client/serveur (socket)

aardman
|
Réponse acceptée !
Salut, oui il faut virer le bind du client.
et pour l'affichage des erreurs:
sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == SOCKET_ERROR) printf("erreur socket(): %d\n", WSAGetLastError());
... a repeter pour toutes les fonctions utilisées: bind, listen, connect. Pour la fonction accept(...) c'est un peu different puisqu'elle retourne INVALID_SOCKET si elle échoue.
|
|
samedi 13 novembre 2004 à 22:09:44 |
Re : Liaison client/serveur (socket)

bthivent
|
Ok Merci, je vais essayer, ++ ! bthivent, jeune programmeur c++ dans ses débuts 
|
|
dimanche 14 novembre 2004 à 09:21:28 |
Re : Liaison client/serveur (socket)

bthivent
|
Il semble qu'il n'y ait aucune erreur.. j'ai fait comme tu m'as dit pour le socket, et pour le bind, le connect et le listen j'ai fait comme ca: if(bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) printf("erreur bind(): %d\n", WSAGetLastError()); |
if(listen(sock, 0) == SOCKET_ERROR) printf("erreur listen(): %d\n", WSAGetLastError()); |
if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) printf("erreur connect(): %d\n", WSAGetLastError()); |
Je ne sais pas si c'est la bonne façon... J'ai un peu évoluer mon code : au démarrage du serveur, je demande sur quel port le serveur sera "accessible". Au démmarage du client, je demande l'adresse ip et le port du serveur... comme ça je peu tester plusieurs valeurs rapidement, mais ca ne marche pas. Peut-être parce que je fais mes teste de mon ordi à mon ordi ? il faut puet-être que j'essaie de connecter deux ordis différents ? Merci ! et @+ bthivent, jeune programmeur c++ dans ses débuts 
|
|
dimanche 14 novembre 2004 à 10:30:47 |
Re : Liaison client/serveur (socket)

bthivent
|
Voici une image du serveur :  et du client :  Normallement sur l'image ci-dessus, je devrai avoir le message : "Bienvenue chez moi" avant que "Appuyez sur une touche pour continuer"... apparaîsse... Et voici mes code complets serveur : #include <iostream> #include <stdlib.h> #include <winsock2.h>
using namespace std;
int main(int argc, char *argv[]) { cout << "**********Serveur**********" << endl; int port; cout << "Port que doit utiliser le serveur :"; cin >> port; WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKET csock; SOCKADDR_IN sin; SOCKADDR_IN csin; sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == SOCKET_ERROR) printf("erreur socket(): %d\n", WSAGetLastError()); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(port); if(bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) printf("erreur bind(): %d\n", WSAGetLastError()); if(listen(sock, 0) == SOCKET_ERROR) printf("erreur listen(): %d\n", WSAGetLastError()); cout << "Serveur en route...\nPort = " << port; while(1) { int sinsize = sizeof(csin); if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET) { send(csock, "Bienvenue chez moi !\r\n", 14, 0); } } system("PAUSE"); return 0; } |
client : #include <iostream> #include <stdlib.h> #include <winsock2.h>
using namespace std;
int main(int argc, char *argv[]) { cout << "**********Client**********" << endl; char addrip[30]; int port; cout << "Adresse ip du serveur ?"; cin >> addrip; cout << "Port du serveur ?"; cin >> port; cout << "Nous allons tenter une connection au serveur : " << addrip << "\npar le port " << port << endl; WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKADDR_IN sin; sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == SOCKET_ERROR) printf("erreur socket(): %d\n", WSAGetLastError()); sin.sin_addr.s_addr = inet_addr(addrip); sin.sin_family = AF_INET; sin.sin_port = htons(port); if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) printf("erreur connect(): %d\n", WSAGetLastError()); system("PAUSE"); return 0; } |
bthivent, jeune programmeur c++ dans ses débuts 
|
|
Cette discussion est classée dans : socket, sin, sock, sockaddr, wsadata
Répondre à ce message
Sujets en rapport avec ce message
PROB SOCKETS CON [ par zzzzzz ]
le code source marche mais quand je rajoute un cout#include #pragma comment(lib,"ws2_32.lib")#include int main(void)
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
LERREUR QUI TUE §§§§§§§§§§§§§§§§ [ par Avalon10101 ]
Vla jai fé mon prog tout é juste mais ya une erreur que je narrive vraiment pas à comprendre ! :C:\Documents and Settings\Alex\Mes documents\Makefile.
[SOCKET]Tjrs le pb de recuperation du buffer recv() [ par enthaz ]
Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur
Socket, quand tu nous tiens ... [ par enthaz ]
Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur
prob sock [ par epoc ]
voilà, g commencé la prog des socks en vc++, mais rien ne transitte alors que la connexion semble être bien effectuée, voilà le code :****************
[devcpp] erreur de lieur [ par Ar4gorn ]
Bonjour, Voila je developpe un leger client-serveur et avec dev-cpp c'est galere du moins au niveau de l'édition des liens. Je ne sais pas quoi mettr
utilisation basique de winsock [ par Spiffou ]
bonjour à tousj'essaie d'apprendre winsock en vc++ mode console pour le moment, et j'ai qlq difficultés...en gros j'etabli bien une connection entre l
Socket Server/Client [ par XKaliBur ]
Je suis débutant et je voudrais faire en sorte d'envoyer un message au mon serveur et des que ce dernier reçoit un message, il réponde en fonction de
socket envoie de text d'apres un fichier [ par hijakhakker ]
salutj'utilise recement les socket et je teste une source qui utilise les socket pour envoyer hello world a qui se connect :#include #pragma comment(l
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|