Bonjour,
debutant en C, j'ai un probleme lorsque j'essaye d'envoyer un UDP, un message d'un client vers un serveur?
Tout d'abord voici les codes( je vous fait grâce des includes, le soucis ne vient apparemment pas de là)
Serveur :
Et le client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #define SERVER_PATH "/tmp/server" #define BUFFER 256 int main (int argc, char* argv[]) { int s=0;//descripteur du socket struct sockaddr_un serveur; struct sockaddr_un client; char buffer[256]; //taille max du buffer int lenght; s=socket(AF_UNIX, SOCK_DGRAM,0); if (s<0) { printf("erreur ouverture socket,erreur %d:\n",errno);} serveur.sun_family=AF_UNIX; strcpy(serveur.sun_path,SERVER_PATH); int len=sizeof(serveur); int rc=bind(s,(struct sockaddr*)&serveur,len); if (rc<0 && errno !=98){printf("echec bind, erreur:%d\n",errno);} int fromlen=sizeof(client); lenght=recvfrom(s,buffer,BUFFER,0,(struct sockaddr*)&client,(socklen_t*)&fromlen); return 0; }
et là, lorsque j'essaye d'envoyer le message au serveur, j'ai une erreur 111, pourtant mes sockets sont bien bindé dans le fichier /tmp,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #define BUFFER 256 #define ADCLI "/tmp/cliso" int main(int argc, char *argv[]) { int sockx=0; struct sockaddr_un client; struct sockaddr_un serveur; char buffer[]="coucou serveur"; printf("buffer %d\n",strlen(buffer)); sockx=socket(AF_UNIX,SOCK_DGRAM,0); if (sockx<0) { printf("erreur ouverture socket,erreur %d:\n",errno);} client.sun_family=AF_UNIX; strcpy(client.sun_path,ADCLI); int lon=sizeof(client); unlink(client.sun_path); int rc =bind(sockx,(struct sockaddr*) &client,lon); if (rc<0 && errno==98) {printf("socket déja bindé");} else if (rc<0 && errno!=98) {printf("echec bind, erreur %d \n",errno);} else {printf("bind ok!");} memset(&serveur,0,sizeof(serveur)); serveur.sun_family=AF_UNIX; strcpy(serveur.sun_path,"/tmp/server"); printf("%s",serveur.sun_path); int envoi=sendto(sockx,buffer,15,0,(struct sockaddr*)&serveur,sizeof(serveur)); printf("%d\n,errno :%d\n",envoi,errno); return 0; }
Pourriez vous m'expliquer le soucis
cordialement
Partager