Programmation socket serveur client c/c++

Signaler
Messages postés
4
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
16 mai 2011
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Bonsoir, je dois coder un serveur en c sous Windows avec comme compilateur borland mais j'ai des erreur que je n'arrive pas a résoudre.
J'ai fait des quelques recherche mais je n'est rien trouver de spécial.
voici mon code


#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#include


#define PORT 4000

int main()
{
struct sockaddr_in nom;
int sd, acc, lg;
int optval=1;
char buff[32];

char nom_serveur[15];

/****************************************/
/* OBTENTION D'UN DESCRIPTEUR DE SOCKET */
/****************************************/

sd=socket(AF_INET, SOCK_STREAM,0);

if (sd==-1)
{
printf("appel socket refuse\n");
exit(0);
}
/* Changement du parametre de la socket pour permettre */
/* une reutilisation immediate apres sa fermeture */
int setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int));

bzero((char*)&nom,sizeof(nom));
nom.sin_port=htons(PORT);
nom.sin_addr.s_addr= INADDR_ANY;
nom.sin_family=AF_INET;

/* BIND */
/********/

if ((bind(sd,(struct sockaddr*)&nom,sizeof(nom))==-1))
{
printf("ERREUR SUR BIND");
exit(2);
}

/**********/
/* LISTEN */
/**********/
listen(sd,1);

/*********************/
/* MESSAGE D'ACCEUIL */
/*********************/

if ((gethostname(nom_serveur,sizeof(nom_serveur)))==-1)
{
perror("1 HOST LOCAL INCONNU");
exit(2);
}

printf("========================================\n");
printf(" SERVEUR SUR %s \n",nom_serveur);
printf("========================================\n");

/**********/
/* ACCEPT */
/**********/

lg=sizeof(nom);
acc=accept(sd,(struct sockaddr*)&nom,&lg);
if (acc<0)
{
printf("appel a accept refuse\n");
exit(0);
}

/************************************/
/* LECTURE DU MESSAGE SUR LA SOCKET */
/************************************/

read(acc,buff,32);
printf("%s\n",buff);
close(acc);
close(sd);
}

et les erreur que j'obtient

sreveur.cpp(36,19):)expected
sreveur.cpp(38,7):Call to undefined function 'bzero'

6 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
salut,
1) le int est en trop avant le nom de la fonction setsockopt.
2) a la place de bzero tu peux utiliser memset.
Messages postés
4
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
16 mai 2011

Salut aardman je vais essayé tes proposions tout de suite. Merci de m'avoir répondu
Messages postés
4
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
16 mai 2011

Salut voila apres essay 3 erreurs s'affiche

- serveur.cpp(37,63):Cannot convert 'int *'to 'const char*'
-serveur.cpp(37,63):Type mismatch in parameter 'optval' in call'__stdcall setcokopt(unsigned int, int, int, const char *,int)'
-serveur.cpp(39,32):Too few parameters in call to 'memset(void *,int,unsigned int)'

Cordialement.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
salut,
lis les messages d'erreurs! tout est expliqué.
les deux premiers te disent que le 4eme param de setsockopt() n'est pas un int* mais un const char*.
le troisième te dis que tu n'as pas donné assez d'arguments a la fonction memset, qui en prend 3.
Messages postés
4
Date d'inscription
samedi 14 mai 2011
Statut
Membre
Dernière intervention
16 mai 2011

salut, le probleme c'est que le 4eme paramétre passé a la fonction setsockopt() n'est pas un const char* mais il est déclaré comme un int.Je ne comprend pas pourquoi le compilateur le considère comme un const char*?
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
salut,
const char* c'est le type attendu par la fonction, et toi tu lui donnes un int*, il manque un cast.