Bonsoir à tous!!
Voici un problème que je ne comprend pas!
Tout d'abord je suis débutant en c#, le but de mon appli est de créer un serveur /client via internet. Hors j'ai un petit soucis avec le code :
Mon erreur se trouve à la ligne
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 richTextBox1.Text = "Démmarage du serveur...\n"; srv = new TcpListener(IPAddress.Any, 3000); //initialise TcpListener détecte automatiquement les connexion, // IPaddress.Any accecpte toute les connexion IP sur le port 3000 richTextBox1.Text += "Initialisation du serveur...\n"; srv.Start(); //On lance la boucle d'écoute richTextBox1.Text += "Le serveur est prêt à écouter\n"; while (true) //Boucle à l'infini { Socket client = srv.AcceptSocket(); // Bloquer quand il n'y a pas de client, AcceptSocket renvoi un socket tout prêt if (client.Connected) { richTextBox1.Text += "client connecté\n"; Thread thr = new Thread(new ThreadStart(ListenThread)); //création d'un thread client richTextBox1.Text += "thread actif\n"; thr.Start(); //Démarre thread } }Enfin ce n'est pas une erreur, c'est ce qui me fait planter mon appli.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Socket client = srv.AcceptSocket();
J'aurai voulu votre avis sur mon code, je crèe le serveur avent le client.
Car il sera toujours actif je voudrait juste qu'il attende le client sans planter
Je ne comprend pas du tout pourquoi..
Et pour ListenThread voici la suite:
Merci de m'aider
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 void ListenThread() { Socket sock = client; //récupère le socket prêt while (sock.Connected != false) //Parler au client tant que ce n'est pas fini { Byte[] rep = new Byte[32767]; //Création d'un tableau de byte int count = sock.Receive(rep, rep.Length, 0); //stock donnée dans rep, longeur du champs dans count string srep = Encoding.ASCII.GetString(rep); //Convertir les donnée en string string reponse = srep.Substring(0, count); //On garde les données exacte grâce à la taille richTextBox1.Text += reponse + "\n"; switch (reponse) { case "deconnexion": richTextBox1.Text += "déconnexion\n"; sock.Shutdown(SocketShutdown.Both); //si deconnexion on ferme le socket en ecriture/lecture sock.Close(); // libere le socket break; } } Thread.CurrentThread.Abort(); //On tue le thread richTextBox1.Text += "thread tué \n"; }
Partager