begin process at 2012 05 28 08:45:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

[client pop3]Exception non gérée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[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 1024

int

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

Membre Club
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 =


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,231 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales