peut être mis hors de la boucle pour optimiser ton code.
wizard512
Messages postés459Date d'inscriptiondimanche 9 janvier 2005StatutMembreDernière intervention11 mai 20132 11 nov. 2006 à 22:48
Bonne source,
simple et utile, trés utile,
et en plus avec dev c++
Merci....
Note : 9/10
enhr
Messages postés3Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention 4 décembre 2005 28 juin 2006 à 13:51
j'ai moi aussi des problème de compilation
les messages d'erreurs
undefined reference to `WSAStartup@8'
undefined reference to `socket@12'
undefined reference to `inet_addr@4'
undefined reference to `htons@4'
undefined reference to `connect@12'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
collect2: ld returned 1 exit status
j'ai vraiment besion d'aide comment configurer mon compilateur?
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006 17 mai 2006 à 19:58
//...
char *ip = "127.0.0.1";//ip de la machine a scnanner (dans ce cas-ci localhost)
WORD o 0; // WORD> unsigned short
WORD f = 0;
WORD x;
WORD port;
WORD port_max = 30;
WORD port_initial = 20;
//port_initial = 20; //premier port a scanner
//port_max = 30; //dernier port a scanner
x = (port_max - port_initial);
//...
pour obtenir un max de portabilité d'un compilateur/lieur(linker) à un autre, éviter les extensions dans le noms des librairies
« #pragma comment(lib, "ws2_32.lib") » devient ceci « #pragma comment(lib, "ws2_32") »
sous Dev-C++/CodeBlocks c'est « libws2_32.a » et sous MSVC c'est « ws2_32.lib », seul le nom(sans extension) de la librairie suffit dans le « #pragma ... »
si par malheur le pragma ne fonctionne pas alors il faut ajouter la librairie dans les options de compilation(pour le lieur/linker)
cs_YURIX
Messages postés18Date d'inscriptionsamedi 21 août 2004StatutMembreDernière intervention12 décembre 2009 12 mai 2006 à 23:51
J'ai un problème lorsque j'essaie de compiler le code avec Dev-C++ 4
Le log du compilateur me donne:
Compilateur: Default compiler
Exécution de g++.exe...
g++.exe "C:\Documents and Settings\YuRi\Bureau\Scanner.cpp" -o "C:\Documents and Settings\YuRi\Bureau\Scanner.exe" -fno-access-control -fmessage-length=0 -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" -fmessage-length=0
In function `int main(int, char**)':
warning: passing `float' for converting 1 of `u_short htons(u_short)'
undefined reference to `WSAStartup@8'
undefined reference to `socket@12'
undefined reference to `inet_addr@4'
undefined reference to `htons@4'
undefined reference to `connect@12'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
collect2: ld returned 1 exit status
Exécution terminée
A chaque fois que j'essaie de faire un fichier cpp avec le code pour les winsocks j'ai cette erreur. Quelqu'un aurait-il une solution a mon problème ?
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 26 avril 2005 à 01:33
Petite remarque:
WSACleanup();
closesocket(sock);
c'est pas bon ca, tu dois libérer les ressources lorsque tu en à terminé et non avant d'en avoir terminé:
...
closesocket(sock);
WSACleanup();
return 0;
Autre remarque:
tu utilise un `struct sockaddr_in sin;` donc dans ton connect() tu devrais lui envoyer: sizeof(struct sockaddr_in) ou encore: sizeof(sin)
connect() renvoie 0 si aucune erreur sauf que ton socket peu bloquer, être en progression, ... vérifie le code d'erreur. WSAEWOULDBLOCK et WSAEINPROGRESS ne constituent en rien une erreur mais plutôt un avertissement si on veut:
tu pourrais mettre un timeout sur tes opérations ou y aller en raw ...
~(.:: NitRic ::.)~
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 26 avril 2005 à 01:15
premier fichier à inclure => winsock2.h <= tout en haut
si tu inclus `windows.h` avant, ca cause ce genre de problème car `windows.h` inclut `winsock.h`(version 1).
au fait, winsock2.h inclut windows.h alors une simple inclusion de winsock2.h suffit ...
~(.:: NitRic ::.)~
cs_Seiken
Messages postés14Date d'inscriptionlundi 9 août 2004StatutMembreDernière intervention24 avril 2005 24 avril 2005 à 17:28
Chez moi ça ne compile pas :
2 sockets2.c
C:\DEV-C_~1\Include\winsock2.h:126: warning: `FD_CLR' redefined
58 c:\dev-c_~1\include\winsock.h
warning: this is the location of the previous definition
141 c:\dev-c_~1\include\winsock2.h
warning: `FD_SET' redefined
.....
Je suis sous Dev-C++ 4, quelqu'un peut m'aider ?
Krox68
Messages postés157Date d'inscriptionjeudi 17 octobre 2002StatutMembreDernière intervention11 septembre 20041 11 sept. 2004 à 10:48
desolé nitric je vais m'appliquer maintenant
en fait c'est pas l'initialisation de la socket mais surtout la boucle va voir dans mes sources pour des scanners plus evolué
en tout cas c'est un bon debut en socket
@+
zinotron
Messages postés65Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention11 septembre 2004 11 sept. 2004 à 08:05
ben moi je dirais juste que la fonction connect() est vachement lente et que je sais que ya des choses a faire pour aller plus vite (bon, faut aller fouiller dans les raw socket et non pas dans les stream sockets, et c'est beaucoup moin facile-pour moi en tout cas :p )
C'est tout
Zinotron
cs_shown
Messages postés40Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention24 décembre 2007 11 sept. 2004 à 01:02
Krox68, non j'ai rien pompé alors peut être qu'il existe presque le même à quelque part en tout cas je suis pas au courant. Donne le lien j'irai voir. Mais de toute façon il est clair que le principe doit être semblable, notament la création du socket : il n'y a pas 36 solutions pour creer et initialiser un socket en partant de là il ne reste plus que la technique pour vérifier si un port est ouvert qui peut différer mais encore une fois elle non plus n'a rien d'exceptionnelle.
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 11 sept. 2004 à 00:32
faut apprendre à écrire Krox68, c'est vraiment dur à lire ...
~(.:: NitRic ::.)~
Krox68
Messages postés157Date d'inscriptionjeudi 17 octobre 2002StatutMembreDernière intervention11 septembre 20041 10 sept. 2004 à 22:37
slt, dsl de te dire sa et peut etre ke je me trompe mai sa sen le pompage sur des sources kasi identiques sur le site
si c pa le cas torai du regarder avan de poster com sa torai mi des fonctions ke les otre scan navai pa
jespere me tromper si c le ca c un bon ebu a par kelk petites erreurs
@+
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 7 sept. 2004 à 04:11
Salut,
Aucun WSACleanup(), aucun closesocket(), ...
Pour la boucle principale: un for ou un do-while, il faut choisir, mais pas les deux.
cs_shown
Messages postés40Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention24 décembre 2007 7 sept. 2004 à 03:22
Pas de problème, merci pour les conseils.
Je corrigerai et je mettrai à jour :)
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 7 sept. 2004 à 03:19
Je trouve drôle le fait que la petite image te représentant il soit inscrit ANSI C mais que ton code ne le soit pas :)( Ce n'est pas un reproche, rassure toi :) )
Personnellement, je te conseil de valider les valeurs retournées par les appels des fonctions un peu plus.
Il est toujours utile de savoir si la fonction à echouée ou réussi :)
Plutôt que d'utiliser %i et %d à la random, reste avec %d. Okay, ils représentent tous les deux un entier signé mais c'est plus `commode` %d qui est le plus utilisé. Je dis ca simplement pour les personnes ne sachant pas ce que représent %i.
Un `return 0;` à la fin de ton main() serait bien aussi. Certain compilateur pourrait ne pas aimer s'il y en à pas.
Si tu n'a aucun formatage à faire lors de l'affichage de chaine à l'écran, tu peux utiliser puts(). Simple suggestion.
18 janv. 2007 à 15:13
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr(ip);
sin.sin_family = AF_INET;
peut être mis hors de la boucle pour optimiser ton code.
11 nov. 2006 à 22:48
simple et utile, trés utile,
et en plus avec dev c++
Merci....
Note : 9/10
28 juin 2006 à 13:51
les messages d'erreurs
undefined reference to `WSAStartup@8'
undefined reference to `socket@12'
undefined reference to `inet_addr@4'
undefined reference to `htons@4'
undefined reference to `connect@12'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
collect2: ld returned 1 exit status
j'ai vraiment besion d'aide comment configurer mon compilateur?
17 mai 2006 à 19:58
char *ip = "127.0.0.1";//ip de la machine a scnanner (dans ce cas-ci localhost)
WORD o 0; // WORD> unsigned short
WORD f = 0;
WORD x;
WORD port;
WORD port_max = 30;
WORD port_initial = 20;
//port_initial = 20; //premier port a scanner
//port_max = 30; //dernier port a scanner
x = (port_max - port_initial);
//...
pour obtenir un max de portabilité d'un compilateur/lieur(linker) à un autre, éviter les extensions dans le noms des librairies
« #pragma comment(lib, "ws2_32.lib") » devient ceci « #pragma comment(lib, "ws2_32") »
sous Dev-C++/CodeBlocks c'est « libws2_32.a » et sous MSVC c'est « ws2_32.lib », seul le nom(sans extension) de la librairie suffit dans le « #pragma ... »
si par malheur le pragma ne fonctionne pas alors il faut ajouter la librairie dans les options de compilation(pour le lieur/linker)
12 mai 2006 à 23:51
Le log du compilateur me donne:
Compilateur: Default compiler
Exécution de g++.exe...
g++.exe "C:\Documents and Settings\YuRi\Bureau\Scanner.cpp" -o "C:\Documents and Settings\YuRi\Bureau\Scanner.exe" -fno-access-control -fmessage-length=0 -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" -fmessage-length=0
In function `int main(int, char**)':
warning: passing `float' for converting 1 of `u_short htons(u_short)'
undefined reference to `WSAStartup@8'
undefined reference to `socket@12'
undefined reference to `inet_addr@4'
undefined reference to `htons@4'
undefined reference to `connect@12'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
collect2: ld returned 1 exit status
Exécution terminée
A chaque fois que j'essaie de faire un fichier cpp avec le code pour les winsocks j'ai cette erreur. Quelqu'un aurait-il une solution a mon problème ?
26 avril 2005 à 01:33
WSACleanup();
closesocket(sock);
c'est pas bon ca, tu dois libérer les ressources lorsque tu en à terminé et non avant d'en avoir terminé:
...
closesocket(sock);
WSACleanup();
return 0;
Autre remarque:
tu utilise un `struct sockaddr_in sin;` donc dans ton connect() tu devrais lui envoyer: sizeof(struct sockaddr_in) ou encore: sizeof(sin)
connect() renvoie 0 si aucune erreur sauf que ton socket peu bloquer, être en progression, ... vérifie le code d'erreur. WSAEWOULDBLOCK et WSAEINPROGRESS ne constituent en rien une erreur mais plutôt un avertissement si on veut:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/connect_2.asp
tu pourrais mettre un timeout sur tes opérations ou y aller en raw ...
~(.:: NitRic ::.)~
26 avril 2005 à 01:15
si tu inclus `windows.h` avant, ca cause ce genre de problème car `windows.h` inclut `winsock.h`(version 1).
/* main.c */
#include <winsock2.h>
#include <stdio.h>
#include <string.h>
/* etc ... */
int main()
{
/* ... */
return 0;
}
au fait, winsock2.h inclut windows.h alors une simple inclusion de winsock2.h suffit ...
~(.:: NitRic ::.)~
24 avril 2005 à 17:28
2 sockets2.c
C:\DEV-C_~1\Include\winsock2.h:126: warning: `FD_CLR' redefined
58 c:\dev-c_~1\include\winsock.h
warning: this is the location of the previous definition
141 c:\dev-c_~1\include\winsock2.h
warning: `FD_SET' redefined
.....
Je suis sous Dev-C++ 4, quelqu'un peut m'aider ?
11 sept. 2004 à 10:48
en fait c'est pas l'initialisation de la socket mais surtout la boucle va voir dans mes sources pour des scanners plus evolué
en tout cas c'est un bon debut en socket
@+
11 sept. 2004 à 08:05
C'est tout
Zinotron
11 sept. 2004 à 01:02
11 sept. 2004 à 00:32
~(.:: NitRic ::.)~
10 sept. 2004 à 22:37
si c pa le cas torai du regarder avan de poster com sa torai mi des fonctions ke les otre scan navai pa
jespere me tromper si c le ca c un bon ebu a par kelk petites erreurs
@+
7 sept. 2004 à 04:11
Aucun WSACleanup(), aucun closesocket(), ...
Pour la boucle principale: un for ou un do-while, il faut choisir, mais pas les deux.
7 sept. 2004 à 03:22
Je corrigerai et je mettrai à jour :)
7 sept. 2004 à 03:19
Je trouve drôle le fait que la petite image te représentant il soit inscrit ANSI C mais que ton code ne le soit pas :)( Ce n'est pas un reproche, rassure toi :) )
Personnellement, je te conseil de valider les valeurs retournées par les appels des fonctions un peu plus.
Il est toujours utile de savoir si la fonction à echouée ou réussi :)
Plutôt que d'utiliser %i et %d à la random, reste avec %d. Okay, ils représentent tous les deux un entier signé mais c'est plus `commode` %d qui est le plus utilisé. Je dis ca simplement pour les personnes ne sachant pas ce que représent %i.
Un `return 0;` à la fin de ton main() serait bien aussi. Certain compilateur pourrait ne pas aimer s'il y en à pas.
Si tu n'a aucun formatage à faire lors de l'affichage de chaine à l'écran, tu peux utiliser puts(). Simple suggestion.
~(.:: NitRic ::.)~