Création
d'entreprise
Posez votre question Signaler

Envoie message client/serveur C, sockets TCP

yodlay 1Messages postés 17 avril 2007Date d'inscription - Dernière réponse le 20 juin 2010 à 16:05
Bonjour j'aurais aimé avoir quelques renseignements sur les sockets . Je dois envoyer lors de la connexion d'un client un message a ce client mais je ne comprend pas vraiment comment on récupère les adresses du client et du serveur.
Comment intégrons nous dans la structure SOCKADRR_in l'adresse du client (cote serveur) et l'adresse du serveur pour la partie client
De ce fait mon programme qui permet de se connecter a mon serveur fait défaut lorsque j'utilise la socket "connect".
/*===============Voici le code============*/
s_in.sin_family= AF_INET;
s_in.sin_port= PORT;
s_in.sin_addr.s_addr= inet_addr(adresse)
/* adresse est par défaut 127.0.0.1*/;
if(connect(n,(struct sockadrr *)&s_in, sizeof(s_in)==-1))
{
printf("Erreur de connexion au serveur \n");
system("pause");
return EXIT_FAILURE;
}
/*==================================*/
Merci bcp par avance !!!
Lire la suite 

Envoie message client/serveur C, sockets TCP »

6 réponses
Réponse
+3
moins plus
bonjour,
voici une partie d'un programme qui accepte une connexion d'un client ...

int main ()
{
int dfs_serveur, dfs_client;
int long_adr_serveur,long_adr_client;
struct sockaddr_in adresse_serveur;
struct sockaddr_in adresse_client;
char buf[MAX_SIZE];

/* Création du socket */

dfs_serveur= socket (AF_INET, SOCK_STREAM, 0);
if (dfs_serveur ==-1)
{
perror("socket");
exit(1);
}

/* Initialisation de l'adresse du socket */

adresse_serveur.sin_family = AF_INET;
adresse_serveur.sin_addr.s_addr=("127.0.0.1");
adresse_serveur.sin_port=1234;

/* Association de l'adresse au socket*/

long_adr_serveur = sizeof (adresse_serveur);
if (bind
(dfs_serveur, (struct sockaddr *)&adresse_serveur,long_adr_serveur)==-1)
{
perror("bind");
exit(1);
}

/* Création d'une file d'attente de connexions pour les clients*/

listen (dfs_serveur,1);
while(1)
{
char ch;
printf("Attendre de connection\n");

/* Accepter les connection*/

long_adr_client = sizeof(adresse_client);
dfs_client = accept(dfs_serveur,(struct sockaddr *)&adresse_client,&long_adr_client);

/*lecture des données envoyées par le client*/

read (dfs_client,buf, MAX_SIZE);
printf("%s\n",buf);
close (dfs_client);
}
}
le programme écoute sur le port 1234 sur l'adresse 127.0.0.1 ...il contient aussi 2 erreur et un warning ... a toi de les trouvé, le plus gros est là...
@+++
Ajouter un commentaire
Réponse
+1
moins plus
Salut,

Ton serveur doit faire
un bind
un listen

Puis se mettre en attente d'une connexion (en TCP) avec
un accept

Une fois cela fait, lorsque le client lance le connect, ton serveur va accepter la connexion (et choper les sockets), il donnera un nouveau numéro de socket pour gérer la communication (send/recv)

Bon courage
cyberdam - 16 mars 2008 à 12:25
bonjour

j'ai essayer a faire la meme chose, ca fonctionne par contre comment je dois faire pour avoir plusieurs client qui se connecte sur le serveur ?


Merci
police - 26 oct. 2008 à 02:42
c koi ton server en
Ajouter un commentaire
Réponse
+0
moins plus
Salut. Pour que le serveur puisse recevoir plusieurs clients, une solution est de créer un thread par client.
http://www.google.fr/search?hl=fr&q=pthread&btnG=Recherche+Google&meta=
http://www.google.fr/search?hl=fr&q=boost&btnG=Rechercher&meta=
http://www.google.fr/search?hl=fr&q=SDL_net&btnG=Rechercher&meta=

Dès qu'un client s'est connecté au serveur et que les deux sockets sont configurés, ton serveur crée un thread et repart ecouter un autre client.
Ajouter un commentaire
Réponse
+0
moins plus
programmecliet serveur en c++
Ajouter un commentaire
Ce document intitulé « Envoie message client/serveur C, sockets TCP » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?