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

C# Discussion :

windows form et sockets


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut windows form et sockets
    bonsoir,
    voilà j'essaie de surveiller les connexion par socket dans l'une de mes applis.
    pour ça j'ai le code suivant :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    public server()
            {
                InitializeComponent();
     
                // on initialise la pictureBox
                init_pb_webcam();
     
    			// initialise et actualise la liste des hôtes
                init_dg_hotes();
                actualise_dg_hotes();
            }
     
            private void server_Load(object sender, EventArgs e)
            {
                Start();
            }
     
            /// <summary>
            /// démarre le mode multi-tâches et les sockets
            /// </summary>
            public void Start()
            {
                // on cherche notre adresse ip
                ip_serveur = AdresseIpLocale(Dns.GetHostName());
     
                // création de la socket
                Socket CurrentClient = null;
                ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     
                try
                {
                    // On lie la socket au point de communication
                    ServerSocket.Bind(new IPEndPoint(ip_serveur, 8000));
     
                    //On la positionne en mode "écoute"
                    ServerSocket.Listen(10);
     
                    // on vérifie que les hôtes sont toujours connectés
                    Thread pingPongThread = new Thread(new ThreadStart(CheckIfStillConnected));
                    pingPongThread.Start();
     
                    // Boucle infinie
                    while (true)
                    {
                        // L'exécution du thread courant est bloquée jusqu'à ce qu'un nouveau client se connecte
                        CurrentClient = ServerSocket.Accept();
                        if (!acceptList.Contains(CurrentClient))
                        {
                            acceptList.Add(CurrentClient);
                        }
                    }
                }
                catch (SocketException E)
                {
                    Console.WriteLine(E.Message);
                }
            }
    seulement ma fenêtre ne se charge pas. j'ai identifié le problème, il s'agit de la boucle infinie de la fonction Start().
    j'ai mis un Thread.sleep() à la fin de chaque while pour qu'il fasse une pause de 10 millisecondes, en pensant que ça pourrait aider l'appli à s'afficher, mais il n'y a aucun changement.
    pourriez-vous m'aider svp ?
    merci

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    nouvelle version du code :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public Socket CurrentClient = null;
     
            public server()
            {
                InitializeComponent();
     
                // on initialise la pictureBox
                init_pb_webcam();
     
    			// initialise et actualise la liste des hôtes
                init_dg_hotes();
                actualise_dg_hotes();
     
                Start();
            }
     
            /// <summary>
            /// démarre le mode multi-tâches et les sockets
            /// </summary>
            public void Start()
            {
                // on cherche notre adresse ip
                ip_serveur = AdresseIpLocale(Dns.GetHostName());
     
                // création de la socket
                ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     
                try
                {
                    // On lie la socket au point de communication
                    ServerSocket.Bind(new IPEndPoint(ip_serveur, 8000));
     
                    //On la positionne en mode "écoute"
                    ServerSocket.Listen(10);
     
                    Thread connexion_hote = new Thread(new ThreadStart(surveiller_connexion));
                    connexion_hote.Start();
     
                    // on vérifie que les hôtes sont toujours connectés
                    Thread pingPongThread = new Thread(new ThreadStart(CheckIfStillConnected));
                    pingPongThread.Start();
                }
                catch (SocketException E)
                {
                    Console.WriteLine(E.Message);
                }
            }
     
            public void surveiller_connexion()
            {
                while (true)
                {
                    MessageBox.Show("1");
     
                    // L'exécution du thread courant est bloquée jusqu'à ce qu'un nouveau client se connecte
                    CurrentClient = ServerSocket.Accept();
                    if (!acceptList.Contains(CurrentClient))
                    {
                        acceptList.Add(CurrentClient);
                    }
                    Thread.Sleep(10);
                }
            }
    maintenant ma form se charge bien. cependant si je mets un messageBox dans la fonction surveiller_connexion(), celui-ci n'aparaitra qu'une seule fois

    de plus, lorsque je quite mon application, visual studio est toujours en mode débogage. j'ai commenté quelques parties du code pour trouver l'origine du problème, il semblerait que ce soit du au thread ! (connexion_hote et pingPongThread)

Discussions similaires

  1. [Delphi 2005 /Windows Forms] passage de paramêtre
    Par Frank dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 28/12/2005, 17h22
  2. [VB.NET] Partager un dataset entre 2 windows forms ???
    Par kissskoool dans le forum Windows Forms
    Réponses: 11
    Dernier message: 26/07/2005, 11h34
  3. [debutant VC++ et C++] Windows form et OPENFILENAME
    Par Le Scandinave dans le forum MFC
    Réponses: 5
    Dernier message: 08/03/2005, 15h31
  4. [C#] windows form et ComboBox
    Par telynor dans le forum Windows Forms
    Réponses: 9
    Dernier message: 12/11/2004, 18h17
  5. [VB.NET] windows form traits
    Par DG JohnJohn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2004, 15h05

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