FASTSCANNERIP

cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010 - 25 oct. 2003 à 22:45
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005 - 30 oct. 2003 à 02:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17385-fastscannerip

kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
30 oct. 2003 à 02:16
ouaip, bon ben apparemment, le caractere de fin de chaine (antislash 0) n'est pas affiche ici ...
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
30 oct. 2003 à 02:05
y'a des trucs qui ont mal passe :

champs[ligne][col] = '' ===> champs[ligne][col] = ''
(utilise 2 fois, c'est "Egale_Apostrophe_AntiSlash_Zero_Apostrophe (au cas ou ca ne repasse pas encore une fois))

if (!IsDigit(IpText[i]) Quitte_... ===> if (!IsDigit(IpText[i])) Quitte_...
(il manque une parenthese apres [i])

sinon tu peux faire un truc du meme genre avec un seul tableau de unsigned char, et en faisant la conversion vers un int quand tu detecte un point

autre solution : utiliser la fonction char * strchr (char *str , int ch);
qui rend un pointeur vers la premiere occurence du caractere ch dans la chaine str, renvoie NULL si le caractere n'est pas trouve

PS : j'avais pas mis les include non plus
#include<ctype.h> // pour isdigit
#include<string.h> // pour strlen
#include<stdlib.h> // pour atoi
cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010
29 oct. 2003 à 19:44
Comme je pensais, avec cette façon on à une recherche nettement plus rapide.
Ton code « kimmelf2 » ne fonctionne pas pour récupérer les 4 valeurs entre chaque point.
Le code sera mis a jour des que j’aurais résolu ce problème. Je vais continuer à optimiser la vitesse
cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010
29 oct. 2003 à 13:05
Oui,
Pour une calculatrice un point correspond à une virgule. Je me suis trompé, bref c’est bien un point.

Normalement, le FastScannerIP devrai aller encore beaucoup plus vite.

J’ai constaté, ci on regard ci il y a un serveur par l’intermédiaire d’un PING avant d’essayer de se connecté.
On obtient vraiment un temps de réponse plus rapide.
Je vais rajouter ton code et le PING pour savoir ci il y a un SERVEUR.

Voici ce que je vais rajouter, tu en pence quoi ?
http://www.cppfrance.com/code.aspx?ID=10221
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
29 oct. 2003 à 02:29
Je te file un code au pied leve (j'ai pas teste, mais normallement, ca marche)


#define VIRGULE ','
#define POINT '.'
#define SEPARATEUR POINT

int i;
unsigned char champs[4][4];
int IP[4];
int ligne=0;
int col=0;

for (i=0;i<strlen(IpText);i++)
if (IpText[i]==SEPARATEUR)
{
champs[ligne][col]='';
col=0;
ligne++;
}
else
{
if (!IsDigit(IpText[i]) Quitte_car_le_ieme_caractere_n_est_pas_un_chiffre();
champs[ligne][col]=IpText[i];
col++;
}
champs[ligne][col]=''

for (i=0;i<3;i++)
IP[i] = atoi(champs[i]);

ca devrais marcher .....

-IpText est la chaine de caractere qui contient l'adresse IP au format texte
-la "fonction" quitte_car..... dois etre remplacee par une gestion d'erreur (message + quitte la fonction ou le pgm par exemple ...)
-les define du debut sont la car tu parlais de virgules dans ta description. je pense que tu voulais dire des points, mais je m'adapte.
cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010
25 oct. 2003 à 22:45
Il est conseillé de ne pas utiliser de logiciel du style emule pour un ScannerIP
Rejoignez-nous