Accueil > Forum > > > > [client pop3]Exception non gérée
[client pop3]Exception non gérée
mercredi 23 mai 2007 à 07:34:38 |
[client pop3]Exception non gérée

electron159
|
Bonjour, je suis sous visual studio, mode console. j'ai essayé d'adapter un client pop3 linux pour qu'il tourne sous windows. Mais, j'ai une exception, alors que je n'ai pas d'erreur : Exception non gérée à 0x00411507 dans pop3.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0000000a. J'ai regardé du côté des pointeurs, mais je n'ai pas trouvé l'erreur. Savez-vous d'où peut provenir cette exception? Merci de votre aide, Alex. Voici le code: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <winsock2.h>#pragma comment (lib , "WS2_32.lib")#pragma comment(lib, "setupapi.LIB") #define PACKET_SIZE 1024int writen(int fd, char *ptr, int n);int readn(int fd, char *ptr, int n);int test_OK(char *buf, int do_exit);char *server_name = "pop.wanadoo.fr";unsigned short server_port=110;char *user= "test@wanadoo.fr";char *pass= "mdptest";int to_server_socket = -1;int main (int argc, char *argv[]){ struct sockaddr_in serverSockAddr; /* addresse de la socket */struct hostent *serverHostEnt; /* description du host serveur */unsigned long hostAddr; /* addr du serveur */unsigned char bufw[PACKET_SIZE+1];unsigned char bufr[PACKET_SIZE+1];unsigned char list[PACKET_SIZE+1];int n, msg, index, retry = 4;SecureZeroMemory(&serverSockAddr, sizeof(serverSockAddr));hostAddr = inet_addr(server_name); if ( (long)hostAddr != (long)-1)memmove(&serverSockAddr.sin_addr,&hostAddr, sizeof(hostAddr));else /* si on a donne un nom */{ serverHostEnt = gethostbyname(server_name); memmove(&serverSockAddr.sin_addr,serverHostEnt->h_addr,serverHostEnt->h_length); } serverSockAddr.sin_port = htons(server_port); serverSockAddr.sin_family = AF_INET; /* creation de la socket */ to_server_socket = socket(AF_INET,SOCK_STREAM,0); /* requete de connexion */ connect(to_server_socket,( struct sockaddr *)&serverSockAddr,sizeof (serverSockAddr));SecureZeroMemory(bufw, PACKET_SIZE+1); SecureZeroMemory(bufr, PACKET_SIZE+1); do {n=readn(to_server_socket,bufr,PACKET_SIZE); retry--; } while(test_OK(bufr,retry==0));/* authentification */ sprintf(bufw, "USER %s\r\n",user);writen(to_server_socket,bufw,strlen(bufw)); n=readn(to_server_socket,bufr,PACKET_SIZE); test_OK(bufr,1); sprintf(bufw, "PASS %s\r\n",pass);writen(to_server_socket,bufw,strlen(bufw)); n=readn(to_server_socket,bufr,PACKET_SIZE); test_OK(bufr,1); /* liste des messages dans la boite aux lettres */ sprintf(bufw, "LIST\r\n");writen(to_server_socket,bufw,strlen(bufw)); n=readn(to_server_socket,bufr,PACKET_SIZE); test_OK(bufr,1); if (strlen(bufr) == 0 )n=readn(to_server_socket,list,PACKET_SIZE); else CopyMemory(list,bufr, strlen(bufr) + 1) ; /* recupération de tous les messages */ index = 0; while ( list[index] != '.' ) {sscanf(&list[index], "%100d", &msg);while (list[index++] != '\n');/* recuperation du message msg */ sprintf(bufw, "RETR %d\r\n",msg);writen(to_server_socket,bufw,strlen(bufw)); do {n=readn(to_server_socket,bufr, PACKET_SIZE); printf( "%s",bufr);if ( ! strncmp("\r\n.\r\n",&bufr[n-5],5) ) break;SecureZeroMemory(bufr, PACKET_SIZE+1); } while ( 1 );} /* fermeture de la connection */ shutdown(to_server_socket,2); close(to_server_socket); return 0;} int writen(int fd, char *ptr, int n){ int nl, nw;nl = n; while ( nl > 0 ) {nw = write(fd, ptr, nl); if ( nw <= 0 )return nw; /*error*/nl -= nw; ptr += nw; } return (n-nl);} int readn(int fd, char *ptr, int n){int nl, nr;nl = n; while ( nl > 0 ) {nr = read(fd,ptr,nl); if (nr < 0 ) return nr; /*erreur*/else if ( nr == 0 ) break;nl -= nr; ptr += nr; if ( *(ptr-2) == '\r' && *(ptr-1) == '\n' )break ;} *ptr = 0x00; return (n-nl);} int test_OK(char *buf, int do_exit) {char *ptr, tmp[PACKET_SIZE+1];SecureZeroMemory(tmp, PACKET_SIZE+1); if ((ptr=strstr(buf, "+OK")) == NULL) {if ( strstr(buf, "-ERR") ) {printf( "ERROR: -->%s<--\n", buf);exit(1); } if (do_exit ) exit(1);else return 1;} else {while (*ptr != '\n') ptr++ ;CopyMemory(tmp,ptr+1,strlen(ptr)); SecureZeroMemory(buf,PACKET_SIZE+1); CopyMemory(buf,tmp, strlen(tmp)); } return 0;}
|
|
jeudi 24 mai 2007 à 08:09:13 |
Re : [client pop3]Exception non gérée

katsankat
|
Salut, Pas super cette source. Réserver 3 fois 1025 octets c'est pas un peu beaucoup? De plus tous ces ZeroMemory font perdre plus de temps qu'autre chose. L'espace est réservé: tu mets 0 à la fin de ce qui t'intéresse et basta. Les fonctions readn() et writen() sont inutiles: rien ne sert de ré-écrire recv() et send(). En effet ces fonctions à vertu pédagogique proviennent des travaux de Richard Stevens, censées montrer l'utilisation des primitives read et write. Test_OK() je la trouve également très lourde. Ajoutez à celà aucune vérification d'erreur, conclusion: poubelle. Même pas besoin de perdre son temps à le débuguer ;) Il y a des sources valables sur cppfrance... Qui utilisent le type SOCKET sur windows. I can break the rules too, goodbye.
|
|
jeudi 24 mai 2007 à 14:06:49 |
Re : [client pop3]Exception non gérée

electron159
|
Et concrètement, d'où vient cette errreur : Exception non gérée à 0x00411507 dans pop3.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0000000a ? :d
|
|
Cette discussion est classée dans : int, server, socket, ptr, bufr
Répondre à ce message
Sujets en rapport avec ce message
PB compilation de socket [ par dhylde ]
Bonjour a tous, j'ai un petit souci de compilation (j'ai du manqué l'inclusion d'une Librairy). Bref je me prend la tete depuis ce matin. Je suis sous
Envoie de données vers un serveur en langage C [ par esmee ]
Bonjour,Besoin d'aide,Débutant en programmation , j'aimerai modifié ce code ci-dessous qui fonctionne bien :write(to_server_socket,"Momo",15);read(to
Probléme a l'éxécution [ par jerem3000 ]
Bonjour Je crée un programme qui permet d'envoyer par email le contenue d'un fichier .txt , il devrait normalement marche car il n'y a pas d'erreur
WSAAsyncselect pour client TCP [ par daviid00 ]
Bonjour, Je suis entrain de développer un client TCP qui se connecte de manière asynchrone à un serveur. Pour ce faire j'utilise la fonction WSAAsync
problème chat [ par Adict ]
salut tout le monde [^^happy17] alors j'ai commencé depuis peu à vouloir créer un "chat" simple. j'utilise donc les sockets qui marchent mais j'ai 2
[C.] 2 Problèmes sur le serveur [ par Adict ]
bonsoir tout le monde. [^^happy13] alors ça va faire vraiment longtemps que je patine sur mon serveur. J'ai cherché et cherché pour le 2ème problème
socket trop lents [ par cid7777777 ]
bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net, jai trouver
affichache d'un document en c [ par godar8 ]
j'ai fait un programe d'editeur de texte en c pour cretion document , ajout , supprimer etcmais j'ai un petit mon document ne s'affiche pas pour
chat client server [ par electroonn ]
Bonjour, j'essaye de developper avec c++ une application de chat (client-server) sous windows, en voici le code:Server server; Client client; void m
socket raw [ par moi zork ]
Bonjour,Je suis entrain de m'entrainer sur les socket raw et je bute sur :#include #include using namespace std;int main (void){ int sock; sock =
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|