begin process at 2012 05 29 08:19:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

Erreur compilation, Requette pour Connaitre le premier port ouvert.....


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

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

Membre Club

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

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

Membre Club

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

Membre Club

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.....

wizard512

Membre Club

Non,
ma fonction n'a pas pour but de renvoyer le dernier port ouvert,
mais le premier...        ^^

j'ai testé ta fonction mais c'est toujours le même résultat, aucune réponse a l'écran....

Merci.......
 
     Cordialement
                      ~~DotWizard512 ~~
            

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.....

wizard512

Membre Club

Ok,
Merci pour tes remarques,
je tacherais d'en prendre compte, ........

Mais sinon quelqu'un pourait m'aider
pour faire fonctionné correctement, mon ProGramMe........?!

   Merci......


          Cordialement
                       ~~ DotWizard512 ~~

              



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


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 : 1,030 sec (3)

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