Probleme en c
info20111
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
moska Messages postés 7520 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
moska Messages postés 7520 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
je suis demandée de développer un code serveur qui:
1-crée et prépare une socket
2-attend une demande de connexion sur la socket crée
3-accepte une demande de connexion en créant une socket de communication
4-utilise la socket de communication pour lire un texte envoyé par le client
5-crée une file de message pour envoyer le texte à un processus Majp si le texte est majuscule.Dans le cas ou le texte est miniscule alors l'envoyer à un autre processus Minp.Dans le cas ou le texte ne vérifie pas ces deux conditions alors le serveur envoie une erreur de saisi au client
6-envoie la réponse reçue de l'un des deux processus Majp ou Minp vers le client via la socket de communication
voila le code du serveur que j'ai developpé:
j'obtiens lors de l'éxécution:
La socket 3 est maintenant ouverte en mode TCP/IP
bind: Permission denied
recv(): Transport endpoint is not connected
je viens de créer une file de message
Le texte en miniscule
je viens de détruire la file
pouvez vous m'aider svp?
je suis demandée de développer un code serveur qui:
1-crée et prépare une socket
2-attend une demande de connexion sur la socket crée
3-accepte une demande de connexion en créant une socket de communication
4-utilise la socket de communication pour lire un texte envoyé par le client
5-crée une file de message pour envoyer le texte à un processus Majp si le texte est majuscule.Dans le cas ou le texte est miniscule alors l'envoyer à un autre processus Minp.Dans le cas ou le texte ne vérifie pas ces deux conditions alors le serveur envoie une erreur de saisi au client
6-envoie la réponse reçue de l'un des deux processus Majp ou Minp vers le client via la socket de communication
voila le code du serveur que j'ai developpé:
#if defined (WIN32) #include <winsock2.h> typedef int socklen_t; #elif defined (linux) #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define closesocket(s) close(s) typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #endif #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #define CLE 17 #define PORT 1024 struct msgbuffer { long mtype; char mtext[256]; }msgp; int majuscule(char *chaine) { int k=0;int i; for( i=1;i<=(strlen(chaine)-1);i++) if (chaine[i]<97) k++; if (k==(strlen(chaine)-1)) return 1; else return 0; } int miniscule(char *chaine) { int k=0;int i; for( i=1;i<=(strlen(chaine)-1);i++) if (chaine[i]>=97) k++; if (k==(strlen(chaine)-1)) return 1; else return 0; } int main(void) { #if defined (WIN32) WSADATA WSAData; int erreur = WSAStartup(MAKEWORD(2,2), &WSAData); #else int erreur = 0; #endif /* Socket et contexte d'adressage du serveur */ SOCKADDR_IN sin; SOCKET sock; socklen_t recsize = sizeof(sin); int BUF_SIZE=100; char buffer[BUF_SIZE]; char *chaine="Erreur de saisie"; /* Socket et contexte d'adressage du client */ SOCKADDR_IN csin; SOCKET csock; int msqid, x,ms; socklen_t crecsize = sizeof(csin); int sock_err; if(!erreur) { /* Création d'une socket */ sock = socket(AF_INET, SOCK_STREAM, 0); /* Si la socket est valide */ if(sock != INVALID_SOCKET) { printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock); /* Configuration */ sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */ sin.sin_family = AF_INET; /* Protocole familial (IP) */ sin.sin_port = htons(PORT); /* Listage du port */ sock_err = bind(sock, (SOCKADDR*)&sin, recsize); /* Si la socket fonctionne */ if(sock_err != SOCKET_ERROR) { /* Démarrage du listage (mode server) */ sock_err = listen(sock, 1); printf("Listage du port %d...\n", PORT); /* Si la socket fonctionne */ if(sock_err != SOCKET_ERROR) { /* Attente pendant laquelle le client se connecte */ printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT); csock = accept(sock, (SOCKADDR*)&csin, &crecsize); printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port)); } else perror("listen"); } else perror("bind"); /* Lire le texte envoyé par le client*/ if(recv(sock, buffer, BUF_SIZE - 1, 0) < 0) perror("recv()"); /*Le serveur crée une file de message pour envoyer le texte lu à un processus Majp si le texte est miniscule.Dans le cas ou le texte est miniscule alors l'envoyer à un autre processus Minp.Dans le cas ou le texte ne vérifie pas ces deux conditions alors le serveur envoie une erreur de saisi au client*/ if (majuscule(buffer)) { msqid = msgget ((key_t)CLE,0666| IPC_CREAT |IPC_EXCL); printf ("je viens de créer une file de message \n"); msgp.mtype=12; strcpy(msgp.mtext,buffer); msgsnd(msqid,&msgp,strlen(buffer), 0); msqid = msgget ((key_t)CLE,0); x=msgrcv(msqid,&msgp,100,(long)12, 0); chaine=msgp.mtext; printf("Le texte en miniscule %s \n",msgp.mtext); msgctl(msqid,IPC_RMID,NULL); printf("je viens de détruire la file \n"); if(send(sock, chaine, strlen(chaine), 0) < 0) { perror("send()"); exit(errno); } } else if (miniscule(buffer)) { msqid = msgget ((key_t)CLE,0666| IPC_CREAT |IPC_EXCL); printf ("je viens de créer une file de message \n"); msgp.mtype=12; strcpy(msgp.mtext,buffer); msgsnd(msqid,&msgp,strlen(buffer), 0); ms= msgget ((key_t)CLE,0); x=msgrcv(msqid,&msgp,100,(long)12, 0); chaine=msgp.mtext; printf("Le texte en majuscule %s \n",msgp.mtext); msgctl(msqid,IPC_RMID,NULL); printf("je viens de détruire la file \n"); if(send(sock, chaine, strlen(chaine), 0) < 0) { perror("send()"); exit(errno); } } else if(send(sock, chaine, strlen(chaine), 0) < 0) { perror("send()"); exit(errno); } /* Fermeture de la socket client et de la socket serveur */ printf("Fermeture de la socket client\n"); closesocket(csock); printf("Fermeture de la socket serveur\n"); closesocket(sock); printf("Fermeture du serveur terminée\n"); } else perror("socket"); #if defined (WIN32) WSACleanup(); #endif } return EXIT_SUCCESS; }
j'obtiens lors de l'éxécution:
La socket 3 est maintenant ouverte en mode TCP/IP
bind: Permission denied
recv(): Transport endpoint is not connected
je viens de créer une file de message
Le texte en miniscule
je viens de détruire la file
pouvez vous m'aider svp?
3 réponses
j'ai pas compri ce que tu veux dire :( le prof nous a demandé d'utiliser les sockets et les files de messages
Rafid machinchose, tu te trompes sur toute la ligne: on n'est pas là pour FAIRE les devoirs des autres.
Saisis-tu la nuance ?
D'autre part les services de messageries (SMTP et consorts) n'ont rien àvoir avec le problème.
Je suis malheureusemenr sur un portable et suis en visite. Je regaederail le problème dès mon retour.
Saisis-tu la nuance ?
D'autre part les services de messageries (SMTP et consorts) n'ont rien àvoir avec le problème.
Je suis malheureusemenr sur un portable et suis en visite. Je regaederail le problème dès mon retour.
Lu
@ rafit,
si tu avais bien lu tu aurai compris que mon clavier avait boufé un mot
Comme dans quasiment tout tes posts d'ailleurs... t'en as apparemment rien à faire de l'orthographe depuis le temps. Cela t'as été signifié à maintes reprises...
Merci de bien vouloir tenir compte des mails de notification reçus dans ta boite mail.
@+
@ rafit,
si tu avais bien lu tu aurai compris que mon clavier avait boufé un mot
Comme dans quasiment tout tes posts d'ailleurs... t'en as apparemment rien à faire de l'orthographe depuis le temps. Cela t'as été signifié à maintes reprises...
Merci de bien vouloir tenir compte des mails de notification reçus dans ta boite mail.
@+