Envoie message client/serveur C, sockets TCP

yodlay Messages postés 1 Statut Membre -  
 asma -
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 !!!
A voir également:

4 réponses

Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
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
2
cyberdam
 
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
0
police > cyberdam
 
c koi ton server en
0
haduss Messages postés 252 Statut Membre 43
 
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à...
@+++
2
ElHuron
 
Salut. Pour que le serveur puisse recevoir plusieurs clients, une solution est de créer un thread par client.
https://www.google.fr/search?hl=fr&q=pthread&btnG=Recherche+Google&meta=&gws_rd=ssl
https://www.google.fr/search?hl=fr&q=boost&btnG=Rechercher&meta=&gws_rd=ssl
https://www.google.fr/search?hl=fr&q=SDL_net&btnG=Rechercher&meta=&gws_rd=ssl

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.
1
asma
 
programmecliet serveur en c++
0