Communiquer entre deux machines en C

Fermé
Ymaq Messages postés 45 Date d'inscription lundi 18 août 2008 Statut Membre Dernière intervention 22 février 2013 - 1 déc. 2010 à 00:36
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 1 déc. 2010 à 08:27
Bonjour,

Je suis en train de réaliser un programme en C qui permet d'établir une connexion entre 2 machines, une serveur et une client, puis de démarrer une "communication" entre ces 2 machines, et de lancer un programme sur la machine serveur via la machine client.


J'ai déjà la connexion qui s'établie, mais je bloque pour le reste...

Voici mes codes pour le client et le serveur (travail sous Linux).


client.c

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>

int creation_socket() {

 int S;
 S=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 return S;
}

int connect_socket(int S, char * addr, char * port) {

struct sockaddr_in addr_serv;
memset(&addr_serv,0,sizeof(addr_serv));
addr_serv.sin_family=AF_INET;
addr_serv.sin_addr.s_addr=inet_addr(addr);
addr_serv.sin_port=htons(atoi(port));

 int C;
 C=connect(S,(struct sockaddr *) & addr_serv, sizeof(addr_serv));
 return C;
}

int main (int argc, char ** argv) {

 int s;
 s=creation_socket();

 int c;
 c=connect_socket(s,argv[1],argv[2]);
 
if (c==-1) {
 printf("Echec connexion.\n");
}
else  {
 printf("Connexion établie, socket numéro %d.\n",s);
}


return 0;
}




serveur.c

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>

int creation_socket() {

 int S;
 S=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 return S;
}


int bind_socket(int S, char * port) {

struct sockaddr_in addr_serv;
memset(&addr_serv,0,sizeof(addr_serv));
addr_serv.sin_family=AF_INET;
addr_serv.sin_addr.s_addr=htonl(INADDR_ANY);
addr_serv.sin_port=htons(atoi(port));

int B;
 B=bind(S,(struct sockaddr *) & addr_serv, sizeof(addr_serv));
 return B;
}

int socket_connexion(int S) {
struct sockaddr_in autre;
memset(&autre, 0 , sizeof(autre));
int connexion;
connexion = accept(S,(struct sockaddr *) & autre, sizeof(autre));
return connexion;
}



int main (int argc, char ** argv) {

 int s;
 s=creation_socket();
 
 int b;
 b=bind_socket(s,argv[1]);
 
 listen(s,50);

 int c;
 c=socket_connexion(s);

if (c==-1) {
 printf("Echec connexion.\n");
}
else  {
 printf("Connexion établie.\n");
}

return 0;
}




A voir également:

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
1 déc. 2010 à 08:27
C'est un bon début.
Maintenant il te suffit de faire des recv et send coté client ET serveur pour avoir une communication.
Un conseil, si tu ne veux pas faire un système de thread qui sépare l'envoie de la réception, je te conseil fortement de mettre sur papier le protocole de communication entre les deux. Sinon, tu risques de t'embrouiller très vite et d'avoir les deux qui attendent une réponse de l'autre.
0