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 ligneCode:
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: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'aiderCode:
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"; }