Création et utilisation d´une dll (erreur ArgumentOutOfRangeException ) [Résolu]

Messages postés
2
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
15 août 2005
- - Dernière réponse : tendence
Messages postés
2
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
15 août 2005
- 15 août 2005 à 02:10
Bonjour j´ai réalisé une petite application d´un client mail, dans l´état basique des choses je n´ai implémenté que les fonctionnalité de base décrite dans un ancien RFC 821 ou 822.

puis j´ai décidé de séparer mon exe en module apès la création d´un package.

l´appel au fonction interface se passe bien mais le programme ne fonctionne pas comme avant, je crois que la cause à un rapport avec la durée vie des objets.

en tout cas lors de la connextion avec le serveur pop il retourne une exception suivante

System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.Substring(Int32 startIndex, Int32 length)
at bibClass_cafe.Pop3.Connect(String server, String username, String password) in c:\Documents and Settings\test\Mes documents\SharpDevelop Projects\bibClass_cafe\Pop3.cs:line 53
at MainForm.ButPOPClick(Object sender, EventArgs e) in c:\Documents and Settings\test\Mes documents\SharpDevelop Projects\café_mail2\MainForm.cs:line 439

une exception que je n´ai pas compris


try


{


obj
= new Pop3 ();


obj
.Connect(PopServer
.Text
, login
.Text
, Passwd
.Text
);


list
= obj
.List();


foreach ( Pop3Message msg
in list
)


{


listBox
.Items
.Add("Message "+ msg
.number
+", de taille "+ msg
.bytes
);


}



le package se trouve dans plusieur fichiers :


using System
.Collections
;


//necessaire pour networkstream


using System
.Net
.Sockets
;


//necessaire pour l'appel de la classe diagnostic


using System
.Diagnostics
;


using System
;


namespace bibClass_cafe


{


/// <summary>


/// Description of Pop3.


/// </summary>


public class Pop3 : System
.Net
.Sockets
.TcpClient



{


public Pop3()


{


}


public void Connect(string server
, string username
, string password
)


{


string message
;


string response
;


Connect(server
, 110);


response
= Response ();


if (response
.Substring(0, 3) ! = "+OK")


{


throw new Pop3Exception(response
);


}


message
= "USER " + username
+ "";


Write (message
);


response
= Response();


if (response
.Substring(0, 3) != "+OK")


{


throw new Pop3Exception (response
);


}


message
= "PASS " + password
+ "";


Write(message
);


response
= Response ();


if (response
.Substring(0, 3) ! = "+OK")


{


throw new Pop3Exception(response
);


}


}


public void Disconnect()


{


string message
;


string response
;


message
= "QUIT";


Write (message
);


response
= Response();


if (response
.Substring(0, 3) != "+OK")


{


throw new Pop3Exception (response
);


}


}


public ArrayList
List()


{


string message
;


string response
;


ArrayList retval
= new ArrayList();


message
= "LIST";


Write (message
);


response
= Response();


if (response
.Substring(0, 3) != "+OK")


{


throw new Pop3Exception (response
);


}


while (true)


{


response
= Response();


if (response
".")


{


return retval
;


}


else


{


Pop3Message msg
= new Pop3Message ();


char[] seps
= {' ',''};


string[] values
= response
. Split (seps
);


msg
.number
= Int32
.Parse(values
[0]);


msg
.bytes
= Int32
. Parse (values
[1]);


msg
.retrieved
= false;


retval
.Add(msg
);


//MessageBox.Show ("bonjour "+'*'+msg.number+'*'+msg.bytes);


continue;


}


}


}


public Pop3Message
Retrieve(Pop3Message rhs
)


{


string message
;


string response
;


Pop3Message msg
= new Pop3Message ();


msg
.bytes
= rhs
.bytes
;


msg
.number
= rhs
.number
;


message
= "RETR " + rhs
.number
+ "";


Write (message
);


response
= Response();


if (response
.Substring(0, 3) != "+OK")


{


throw new Pop3Exception (response
);


}


msg
.retrieved
= true;


while (true)


{


response
= Response ();


if (response
== ".")


{


break;


}


else


{


msg
.message
+= response
;


}


}


return msg
;


}


public void Delete(Pop3Message rhs
)


{


string message
;


string response
;


message
= "DELE " + rhs
.number
+ "";


Write(message
);


response
= Response ();


if (response
.Substring(0, 3) ! = "+OK")


{


throw new Pop3Exception(response
);


}


}


private void Write(string message
)


{


System
.Text
.ASCIIEncoding en
= new System
.Text
.ASCIIEncoding() ;


byte[] WriteBuffer
= new byte[1024] ;


WriteBuffer
= en
. GetBytes (message
) ;


NetworkStream stream
= GetStream() ;


stream
.Write(WriteBuffer
,0,WriteBuffer
.Length
);


Debug
.WriteLine("WRITE:" + message
);


}


private string Response()


{


System
.Text
.ASCIIEncoding enc
= new System
.Text
.ASCIIEncoding();


byte []serverbuff
= new Byte
[1024];


NetworkStream stream
= GetStream ();


int count
= 0;


while (true)


{


byte []buff
= new Byte
[2];


int bytes
= stream
.Read( buff
, 0, 1 );


if (bytes
1)


{


serverbuff
[count
] = buff
[0];


count
++;


if (buff
[0] == '')


{


break;


}


}


else


{


break;


};


};


string retval
= enc
.GetString( serverbuff
, 0, count
);


Debug
.WriteLine("READ:" + retval
);


return retval
;


}


}


}



puis dáutre classes


namespace bibClass_cafe


{


/// <summary>


/// Description of Class1.


/// </summary>


public class Pop3Message


{


public long number
;


public long bytes
;


public bool retrieved
;


public string message
;


};


}



ET LA DERNIERE


using System
;


namespace bibClass_cafe


{


/// <summary>


/// Description of PopClass.


/// </summary>


public class Pop3Exception : System
.ApplicationException



{


public Pop3Exception()


{


}


public Pop3Exception(string str
):base
(str
)


{


}


};



NOTE : j´ai utilisé Sharpdevlop
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
3
Merci
Salut j'ai pas tout regardé mais l'exception te dit que tu as un problème avec les instances de "SubString( 0, 3 )", 3 n'est pas une position dans la chaine.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
3
Merci
En effet , avant de faire un substring , assures toi toujorus de :
1/ chaine non vide
2/ lenght > 3

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de titeoe
Messages postés
2
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
15 août 2005
3
Merci
merci pour vos réponse,
si je n'ai pas répondu parce ke j'etai en déplacement

j'ai réalisé quelque test, j'ai augmenté la duré pour laquelle la connexion ne serra pas intérompu (la variable timeOut dans TcpClient).

l'erreur coorespandant à substring n'est plus mai il y a une autre erreur de type le serveur distant ne répond pas convenablement.

au cour de l'etablissement de la connexion j'utilise les fonction write et response pour cfommuniqué avec le serveur mais aparament lors du troisième appel de l'une de ces deux fonctions leurs execution est étoufé

comme je croyai la premiere erreur etait du au temps qu'il ne faut pas dépasser entre l'appel des différents fonction avec la communiccation avec un serveur distant surtout si le temps de propagation est important

mai maintenant je crois ke la nouvelle eerrreur est du à un kelkechose en rapport avec la pile ou l'ercasement des zone mémoire partagé propore au DLL.

la discussion est ouverte

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de tendence