CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème en C sous LINUX avec les socket

tomar
tomar
Niveau 2
17 avril 2007 à 23:20:49

Bonjour,
J´ai essayé de faire ceci, c´est la partie serveur d´un petit chat mais ca ne compile pas.
Je ne comprends pas pourquoi. Quelqu´un peut m´aider ?
Merci
Le code :

  1. include <sys/types.h>
  2. include <sys/socket.h>
  3. include <netinet/in.h>
  4. include <fcntl.h>
  5. include <netdb.h>
  6. include <stdio.h>
  7. include <stdlib.h>
  8. include <string.h>
  9. include <unistd.h>
  1. define MAX_SIZE 256
  2. define PORT 44412

int main(int argc, char *argv[])
{
struct hostent *hp = NULL;
struct sockaddr_in serv_ad, client_ad;
int sin_size,retour;
unsigned long addr;
int sockd, sockcli;
int valide;

if (argc != 2)
{
printf("Probleme d´arguments\n");
exit (1);
}
hp = argv[1] ;
//open the socket
if ((sockd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
{
printf(" error open socket\n");
return -1;
}

if (setsockopt(sockd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1)
{
printf(" error set socket options\n");
return -1;
}

//configuration de serv_ad
serv_ad.sin_family=AF_INET;
serv_ad.sin_port=htons(PORT);
serv_ad.sin_addr.s_addr=hp->h_addr;
serv_ad.sin_zero[8]=0;
sin_size= hp->h_length;
if(bind(sockd, (struct sockaddr*)&serv_ad,sin_size)==-1)
{
printf(" error bind\n");
return -1;
}

if (connect(sockd,(struct sockaddr*)&serv_ad,sin_size)==1)
{
printf(" error connect\n");
return -1;
}

if
(send(sockd,(char*)&serv_ad,sizeof(serv_ad),0)==-1
)
{
printf(" error send\n");
return -1;
}

while(1)
{
// lancement de l´attente de connexion client
if (listen(sockd,5)==-1)
{
printf(" error listen\n");
return -1;
}

if (accept(sockd,(struct sockaddr*)&serv_ad,&sin_size)==-1)
{
printf(" error accept\n");
return -1;

}
// dialogue avec le client
retour = recv(socket,(char*)&serv_ad,sizeof(serv_ad),0 );
if (retour == -1)
{
printf(" error recv\n");
return -1;
}
retour = send(socket,(char*)&serv_ad,sizeof(serv_ad),0 );
if (retour == -1)
{
printf(" error send\n");
return -1;
}

// fermeture socket client
shutdown(sockcli,1);
exit(0);
}

close(sockcli);

return 0;
}

Fvirtman
Fvirtman
Niveau 10
18 avril 2007 à 00:24:45

"ca ne compile pas"
--> Mais encore ?

Donne nous l´erreur, sur quelle ligne elle apparait. Car si gcc (ou g++) te donne cette info, pourquoi ne nous en fais tu pas profiter ?

godrik
godrik
Niveau 30
18 avril 2007 à 13:11:40

tu peux mettre ton code sur un wall pour qu´il soit un peux plus lisible...
rafb.net/paste

Mike327682
Mike327682
Niveau 4
19 avril 2007 à 15:13:41

J´ai essayé de le compiler et voici les erreurs:

merde.c: In function ‘main’:
merde.c:28: warning: assignment from incompatible pointer type
merde.c:46: warning: assignment makes integer from pointer without a cast
merde.c:85: warning: passing argument 1 of ‘recv’ makes integer from pointer without a cast
merde.c:91: warning: passing argument 1 of ‘send’ makes integer from pointer without a cast

Mike327682
Mike327682
Niveau 4
19 avril 2007 à 15:16:22

Ouos j´ai oublié de mettre -Wall, voici le résultat:

merde.c: In function ‘main’:
merde.c:28: warning: assignment from incompatible pointer type
merde.c:46: warning: assignment makes integer from pointer without a cast
merde.c:78: warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness
merde.c:85: warning: passing argument 1 of ‘recv’ makes integer from pointer without a cast
merde.c:91: warning: passing argument 1 of ‘send’ makes integer from pointer without a cast
merde.c:19: warning: unused variable ‘addr’
merde.c:17: warning: unused variable ‘client_ad’

dnob700
dnob700
Niveau 10
19 avril 2007 à 16:01:25

si c´est seulement ça, alors ça compile, vu qu´il n´y a pas d´erreur mais seulement des warnings.

Donc ton programme doit être quelque part (peut-être un fichier a.out si tu ne lui a pas donnée d´autre nom).

Tu devrais peut-être apprendre à programmer un peu, et à te servir de ton compilo avant d´essayer de faire de vrai programme. Car en copiant-collant du code comme ça, tu n´apprendra pas grand chose.

Fvirtman
Fvirtman
Niveau 10
19 avril 2007 à 18:23:03

Mike327682 > je pense qu´il est tres important, d´une façon générale, de comprendre ce que le compilo te dit : les messages d´erreur, les warnings, savoir pourquoi il dit ça, et ce que tu risques quand tu as un warning.
Evidemment, il arrive toujours qu´un message d´erreur soit incompris, et que le forum soit nécessaire pour en parler :)

La programmation réseau n´est pas évidente en soi. Quel est ton niveau dans la programmation "plus basique" ?

Mike327682
Mike327682
Niveau 4
19 avril 2007 à 18:25:13

Hola, je crois qu´il y a confusion.

J´ai juste compilé le programme de tamar puisque je suis sur Linux mais je ne suis pas lui et n´ai rien à voir avec ce programme.

Mike327682
Mike327682
Niveau 4
19 avril 2007 à 18:29:16

En fait j´ai fait ça juste pour que vous puissiez lui répondre avant qu´il revienne.

dnob700
dnob700
Niveau 10
19 avril 2007 à 18:33:21

ok, mais dans ce cas là, les réponses s´applique quand même à lui, sauf s´il a d´autre messages d´erreurs.

Fvirtman
Fvirtman
Niveau 10
19 avril 2007 à 18:57:57

Ah vi, tu n´es pas le meme, j´avais pas fait attention :-)

Fumer_tue
Fumer_tue
Niveau 4
23 avril 2007 à 15:50:32

lol

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment