IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Probleme accept socket


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut Probleme accept socket
    Bonjour
    Je fais un serveur sous Visual C++, qui doit se lancer en clikant sur un bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
     
    	WSADATA initialisation_win32; 
    	int erreur; 
    	int tempo; 	
     
    	SOCKET id_de_la_socket; 
    	SOCKET id_de_la_nouvelle_socket; 	
                 SOCKADDR_IN information_sur_la_source; 
    	erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32); 
    	id_de_la_socket=socket(AF_INET,SOCK_STREAM,0); 
                 information_sur_la_source.sin_family=AF_INET;
    	information_sur_la_source.sin_addr.s_addr=INADDR_ANY; 	
                 information_sur_la_source.sin_port=htons(33333); 
    	erreur=bind(id_de_la_socket,(struct sockaddr*
    &information_sur_la_source,sizeof(information_sur_la_source));
     
    		erreur=99; 
    	while(erreur!=0) 
    		erreur=listen(id_de_la_socket,1);
     
    	tempo=sizeof(information_sur_la_source); 	
                 id_de_la_nouvelle_socket=accept(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,&tempo);
     
     
    			 }
    Or si j'enlève le accept tout semble marcher, mais quand je garde cette ligne toute l'application se bloque... Quelqu'un saurait comment faire?

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    la fonction accept() fonctionne en mode bloquant. elle se bloque jusqu' à ce une connection soit etablie.
    Pour eviter que l' application se bloque, il faut la mettre un thread.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    Ah Ok... Et comment on fait ça?

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    À ta place, je n'utiliserais pas Winsock en .Net.
    Tu as les classes de System.Net.Sockets qui devraient t'être plus utiles...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    À ta place, je n'utiliserais pas Winsock en .Net.
    Tu as les classes de System.Net.Sockets qui devraient t'être plus utiles...
    Pourquoi ne devrait-on pas utiliser winsock en .net ?
    Je le fais depuis plusieurs mois et je n' ai eu aucun soucis.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    C'est juste une question de goût personnel, sans doute...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est juste une question de goût personnel, sans doute...
    Je croyais qu' il y' a des avantages en utilisant le System.Net.Sockets.

    Il y' a une chose que je ne comprend. J' ai eu à developpez un clients/serveur en utilisant le winsock. J' ai mis toutes les fonction dans des threads (accept, read, send, ...) mais il arrivait que l' application se bloque quand un client ne repond pas.Pourtant, j' avais bien utilisé le fameux select().
    J' avais utilisé la construction suivante pour les threads :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    delegate void DelegateHandler();
    DelegateHandler ^socketDelegate;
    void socketOpeation()
    	{
    		...
    	}
    ...
     
    //quelque part
    Threading::Thread ^t = gcnew Threading::Thread(gcnew Threading::ThreadStart(this, &Form1::ExecuteLongTraitement));
    		t->Start();
    ...
    //
     
    void ExecuteLongTraitement()
    	{
    	  while (true)
                    {...}	
     
    	}

Discussions similaires

  1. Probleme client socket
    Par BOUBOU81 dans le forum C++Builder
    Réponses: 7
    Dernier message: 19/04/2010, 21h03
  2. Problemes des Sockets
    Par hinda dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2006, 16h03
  3. [VB6] Probleme de socket
    Par johnson95 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/06/2006, 09h39
  4. Probleme de socket
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 11/03/2006, 22h37
  5. [Debutant] Probleme connection socket
    Par sorry60 dans le forum Réseau
    Réponses: 38
    Dernier message: 12/11/2005, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo