Accueil > Forum > > > > Erreur compilation, Requette pour Connaitre le premier port ouvert.....
Erreur compilation, Requette pour Connaitre le premier port ouvert.....
samedi 11 novembre 2006 à 22:59:08 |
Erreur compilation, Requette pour Connaitre le premier port ouvert.....

wizard512
|
Bonsoir, Je souhaiterais avoir un peu d'aide si possible, pour finir de réalisé un petit programme en c, Car j'ai rencontré des problèmes, Sachant que
je compile avec Dev C++
Se Programme a pour but d'afficher a l'écran le premiers port ouvert...
Voici le code source :
####################################################
#include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") // Inclure dans le projet : libwsock32.a
#define true 1 #define false 0
/* on initialise notre winsock */ WSADATA WSAData; WSAStartup( MAKEWORD( 2 , 0 ) , &WSAData ); /* fin d'initialisation */ /* on construit notre socket */ SOCKET sock; SOCKADDR_IN sin; /* FIN DE LA CONSTRUCTION */ int Port = 4; // Unassigned Port
bool Is_Open_Port( int port ) { sock = socket( AF_INET, SOCK_STREAM, 0 ); sin.sin_addr.s_addr = inet_addr( "127.0.0.1" ); sin.sin_family = AF_INET; sin.sin_port = htons( port ); if( ( connect( sock, ( struct sockaddr* ) &sin, sizeof( struct sockaddr ) ) ) == true ) { return false; } return true; }
int PortConnect( void ) { if( Is_Open_Port( Port ) ) { Port = Port++; return PortConnect(); } return Port; }
int main( void ) { printf( "Premier port ouvert : %.f\n" , PortConnect() ); WSACleanup(); //on libére les ressources allouées closesocket(sock); //on ferme le socket return false; }
####################################################
L'erreur étant : "expected `,' or `;' before '(' token" concernant la ligne en rouge dans le code....
Merci d'avoir lu jusqu'aux bout, ........ ^^
Cordialement ~~ DotWizard512 ~~ 
|
|
samedi 11 novembre 2006 à 23:15:08 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....

SAKingdom
|
Tu appel WSAStartup en dehors d'une fonction. Hors, en C, l'emplacement de départ, pour une console, est la fonction main. L'execution ne commence pas au début du fichier mais dans la fonction main donc si tu pouvais compiler (supposons que), WSAStartup ne serais jamais executé. Il faut donc que cette fonction soit appeler à partir d'une autre fonction. C++ (@++)
|
|
samedi 11 novembre 2006 à 23:38:01 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....

wizard512
|
Hum, Je vois, merci beaucoup, sauf que apres avoir remixé mon code, ormi le fait qu'il le compile correctement, Il reste une chose qui me gène, le programme marche a moitier, car il n'affiche rien.... ^^' Peux etre s'agit t'il du temps de la requette......?!
Code Remixé :
############################################
#include <stdio.h> #include <winsock2.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") // Inclure dans le projet : libwsock32.a
#define true 1 #define false 0
int Port = 4; // Unassigned Port
bool Is_Open_Port( int port ) { /* on initialise notre winsock */ WSADATA WSAData; WSAStartup( MAKEWORD( 2 , 0 ) , &WSAData ); /* fin d'initialisation */ /* on construit notre socket */ SOCKET sock; SOCKADDR_IN sin; /* FIN DE LA CONSTRUCTION */ int a; sock = socket( AF_INET, SOCK_STREAM, 0 ); sin.sin_addr.s_addr = inet_addr( "127.0.0.1" ); sin.sin_family = AF_INET; sin.sin_port = htons( port ); if( ( connect( sock, ( struct sockaddr* ) &sin, sizeof( struct sockaddr ) ) ) == true ) { a = false; } else { a = true; } WSACleanup(); //on libére les ressources allouées closesocket(sock); //on ferme le socket return a; }
int PortConnect( void ) { if( Is_Open_Port( Port ) ) { Port = Port++; return PortConnect(); } return Port; }
int main( void ) { printf( "Premier port ouvert : %d\n" , PortConnect() ); system( "pause" ); return false; }
############################################
Cordialement ~~ DotWizard512 ~~  
Merci.....
|
|
dimanche 12 novembre 2006 à 00:24:18 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....

TMONOD
|
Bonsoir, - à tout hazard, tu as vérifié que connect renvoyait bien un "booléen" sous forme d'entier. Je serai toi j'essayerais en virant le ==true
if( ( connect( sock, ( struct sockaddr* ) &sin, sizeof( struct sockaddr ) ) ) == true
)
- D'autre part ton port=port++ me semble un peu douteux, le résultat risque d'être un peu inderminé à mon avis. Tu me diras, comme il évalue la partie droite en premier ca revient de toute manière à faire port++; qui est plus orthodoxe.
Ah ! j'ai trouvé
, tu as une boucle sans fin (quand un port est ouvert) dans ta fonction PortConnect : int PortConnect( void ) { if( Is_Open_Port( Port ) ) { Port = Port++; return PortConnect(); } return Port; }
Je croise les doigts que c'est ça le problème . Bon courage !!
Jcbé[^]
|
|
dimanche 12 novembre 2006 à 00:37:10 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....

wizard512
|
Kel Cretin je suis alors ^^" J'avais rien vu venir, sur les 3 erreurs que tu ma montré y en a, aux moins 2 que j'aurais pu évité... La Honte ^^'
Ba J'ai ReReMixé l'code mais y a toujours le même problème...
Code ReRemixé :
#################################################################
#include <stdio.h> #include <winsock2.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") // Inclure dans le projet : libwsock32.a
#define true 1 #define false 0
int Port = 4; // Unassigned Port
bool Is_Open_Port( int port ) { /* on initialise notre winsock */ WSADATA WSAData; WSAStartup( MAKEWORD( 2 , 0 ) , &WSAData ); /* fin d'initialisation */ /* on construit notre socket */ SOCKET sock; SOCKADDR_IN sin; /* FIN DE LA CONSTRUCTION */ int a; sock = socket( AF_INET, SOCK_STREAM, 0 ); sin.sin_addr.s_addr = inet_addr( "127.0.0.1" ); sin.sin_family = AF_INET; sin.sin_port = htons( port ); if( connect( sock, ( struct sockaddr* ) &sin, sizeof( struct sockaddr ) ) ) { a = false; } else { a = true; } WSACleanup(); //on libére les ressources allouées closesocket(sock); //on ferme le socket return a; }
int PortConnect( void ) { if( Is_Open_Port( Port ) == false ) { Port++; return PortConnect(); } return Port; }
int main( void ) { printf( "Premier port ouvert : %d\n" , PortConnect() ); system( "pause" ); return false; }
#################################################################
Merci..........
Cordialement ~~DotWizard512~~
 
|
|
dimanche 12 novembre 2006 à 00:48:28 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....

TMONOD
|
J'avoue que je n'ai jamais trop travaillé sur les ports et tout ça mais j'ai fait du C et là il me semble que ca serait encore mieux d'écrire :
(en admettant qu'il y a 4 ports et que ta fonction soit une fonction de scrutation de ports et renvoie le numéro du dernier port ouvert)
int PortConnect( void ) { int p; int port=-1; while(port==-1) { for(p=0;p<4;p++)
{ if( Is_Open_Port( port ))
port=p }//next }//end while return port;
}
Jcbé[^]
|
|
dimanche 12 novembre 2006 à 00:59:14 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....
|
dimanche 12 novembre 2006 à 11:20:39 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....

TMONOD
|
Bonjour,
En fait si tu réfléchis bien, le dernier et le premier c'est exactement la même chôse pour une fonction comme ca , c'est trés rare que deux ports soient ouverts successivement à quelques microsecondes d'intervalle. D'autre part j'attirai seulement ton attention sur le fait que la récursivité de ta fonction PortConnect est trés jolie mais elle perturbe la bonne lisibilité du code.
Bon, à un de ces 4
Jcbé[^]
|
|
dimanche 12 novembre 2006 à 11:34:50 |
Re : Erreur compilation, Requette pour Connaitre le premier port ouvert.....
|
Cette discussion est classée dans : port, return, sin, sock, ouvert
Répondre à ce message
Sujets en rapport avec ce message
[SOCKET]Tjrs le pb de recuperation du buffer recv() [ par enthaz ]
Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur
Socket, quand tu nous tiens ... [ par enthaz ]
Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur
J' ai un Problème avec les sokets. Peut on m' aider a faire un serveur [ par arsenicxenon ]
ArsenicEt oui encore un Problème de débutant avec les sokets mais bon !!je n' arive pa a coder un serveur pour un Chat.Voiçi le code source pouriez vo
socket 100% CPU [ par fredo2009 ]
Salut@tousVoilà la fonction que j'utilise pour savoir si un port est ouvert sur une ip:DWORD WINAPI connection( LPVOID Param ) { struct config * conf
[C] Scanner de port utilise socket version linux [ par firemax ]
Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l
prb a la compilation vous vc++ [ par shadow1779 ]
Bonjour,j'ai tenté de faire un programme en C utilisant les sockets, la personne qui lance son programme choisi elle meme l'ip et le port a se connect
client serveur echange de donne [ par bapdur ]
voici la version dun client et dun serveur que je fais pour un jeu mais les donnes son envoyer en continu jaimerais aire en sorte que si je tape un ca
probleme de send en C avec socket [ par thorn74 ]
bonjour je suis actuellement en IUT info et G un projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte a
serveur / client [ par the68 ]
Bonjour à tous, Voilà je débute dans la programmation en C; j'ai suivis attentivement un tutoriel sur le C pour avoir les bases, et là je me lance d
Connexion serveur client réseau [ par matad0r ]
Bonjour ! Ceci est mon premier post ! Voilà mon problème : j'ai créer deux applications, une cliente et une serveur. Mais le problème est que elle ne
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft 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
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
|