diablo31170
Messages postés17Date d'inscriptionmercredi 15 mai 2013StatutMembreDernière intervention13 juin 2006
-
10 mai 2006 à 15:49
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 2012
-
11 mai 2006 à 20:18
Bonjour à tous le monde,
comme le nom l'indique, cela va parler de soscket sous linux (en C++). Il aut savoir que je travaille en mode connecté.
Je cherche un programme permettant de dialoguer entre deux application
entre deux PC ; un client et un serveur (une application par PC).
J'ai lu les méthodes a utiliser :
- Création de la socket : sockaddr_in //initialise la socket
- Identifiaction de la station du serveur avec struct hostent gethostbyname(* name)
- Création de la socket : socket(domaine, type, protocole)
- demande de la connection : int connect (sock, adrss,lg_ag)
- dialogue serveur/client :
- fermeture de la socket :
Les questions que je me pose sont :
- Je ne connait pas la fonction pour fermet la socket ?
- pour dialoguer serveur/client, il faut juste utilisé les fonctions recv() et send() ?
- Faut il faire un attachement de la soket avec la fonction bind() ?
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 20121 11 mai 2006 à 20:18
Si tu veux te servir des string en C, c mort.
String est une class de la STL, utilisé en C++. En C++ tu a besoin d'un include pour utiliser les string : .
Mais ne compte pas pouvoir t'en servir en C, il faut que tu utilise ce bon vieu char.
De plus fprintf ne marche pas, c'est printf("Taper votre trame \n"); ou fprintf(stdout,"Taper votre trame \n");
#define MAX_SIZE 65535
char a[MAX_SIZE] = " ";
ou
char* a=(char*)malloc(sizeof(char)*MAX_SIZE)
zytry
Messages postés12Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention12 septembre 2006 10 mai 2006 à 16:42
1. Pour fermer la socket : close(descripteur);
2. Pour le dialogue, tu peux utiliser read et write (en TCP), aucune idee pour recv et send mais je crois que ça marche (a confirmer)
3. Pour le bind, tu dois le faire explicitement pour le serveur, mais il sera fait implicitement pour le client
Petite remarque, gethostbyname() n'est pas necessaire, tu peux ecouter sur toutes les interfaces en faisant serveur_adr.sin_addr.s_addr INADDR_ANY;, ou sinon inet_addr("127.0.0.1"); suffit
/* pour le client un bind est fait automatiquement lors du connect() */
memset(&serv_addr, '\0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons((uint16_t)atoi(argv[2]));
memcpy(&serv_addr.sin_addr, phost->h_addr, phost->h_length);
if (connect (sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1 ) { perror ("connect()"); exit(EXIT_FAILURE); }
Pour la fermeture de socket. Il s'agit d'un fichier comme un autre. Une ressource du programme qui sera libérée avec toutes les autres. Il n'est pas necessaire de faire un close, s'il n'est pas utile.
Vous n’avez pas trouvé la réponse que vous recherchez ?
diablo31170
Messages postés17Date d'inscriptionmercredi 15 mai 2013StatutMembreDernière intervention13 juin 2006 10 mai 2006 à 18:54
Merci pour vos réponse mais j'ai un doute : je doit mettre le code de l'emetteur (client) et du recpeteur (serveur) dans un même fichier.cpp ou dans deux fichiers séparés ?
Une autre question pour toi AlexN : j ai pas compris ou il faut meetre ce bout de code :
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 20121 11 mai 2006 à 13:04
Il faut pas que tu lance le recepteur en arriere plan (avec un &) car tu peux plus avoir acces à la console.
Lance 2 consoles. Une avec l'emetteur et une avec le recepteur.
diablo31170
Messages postés17Date d'inscriptionmercredi 15 mai 2013StatutMembreDernière intervention13 juin 2006 11 mai 2006 à 15:28
Salut a tous,
Ala place du While(++cpt) dans l'emetteur.c, j'ai remplacé ce bout de
code : il permet a l'utilisateur de taper une trame(chaine de
caractère) et donc d'afficher cette trame dans la console du recpeteur,
mais j'ai un probleme avec le scanf.
char * a;
<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">