Communiquer entre deux machines en C

Ymaq Messages postés 45 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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;
}




1 réponse

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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