Guillamue06
Messages postés157Date d'inscriptiondimanche 18 avril 2004StatutMembreDernière intervention11 juillet 2022
-
7 oct. 2011 à 20:37
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023
-
8 oct. 2011 à 14:09
Bonjour, je reviens du langage python et ça fait longtemps que je n'est pas fait du VB.NET
J'essai de faire un server multi client en .NET puis je le test avec un client en python :
Je ne sais pas si c'est bien de faire ainsi mais voici le début de mon serveur, Le problème est que des que le client se connecte et envoi un message, le programme se ferme sans même de message d'erreur :
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Public Sck As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Public Connexion As New List(Of Socket)
Public buff(1024) As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Sck.Bind(New IPEndPoint(IPAddress.Parse("192.168.0.4"), 256))
Sck.Listen(1)
CreationSocket()
End Sub
Private Sub CreationSocket()
Connexion.Add(Sck)
Connexion(Connexion.Count - 1).BeginAccept(AddressOf AccepteConnexion, Sck)
End Sub
Private Sub AccepteConnexion(ByVal asyncResult As IAsyncResult)
Connexion(Connexion.Count - 1) = Connexion(Connexion.Count - 1).EndAccept(asyncResult)
CreationSocket()
End Sub
Private Sub MessageRecu(ByVal asyncResult As IAsyncResult)
For i As Integer = 0 To Connexion.Count
Dim recu As Integer = Connexion(i).EndReceive(asyncResult)
If recu <> "" Then
Chat.Text = Chat.Text & vbCrLf & Encoding.ASCII.GetString(buff)
End If
Next i
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Try
For i As Integer = 0 To Connexion.Count
Connexion(i).BeginReceive(buff, 0, buff.Length, SocketFlags.None, AddressOf MessageRecu, Connexion(i))
Next i
Catch
End Try
End Sub
End Class
Une personne a une idée ?
Pareil si je veut informé en inscrivant dans le textbox "Chat" VB.net me parle de Thread (je sais se que c'est) et ne veut rien inscrire...
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 8 oct. 2011 à 14:09
Bonjour,
Je comprend ta remarque, après, il y a aussi pas mal de possibilité qui découle de cette implémentation.
Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 7 oct. 2011 à 21:39
Bonjour,
Dans la mesure du possible, faire une classe pour les clients ainsi qu'un classe pour l'écouteur te permet de faciliter la gestion des sockets.
En plus, en utilisant les threads, tu pourra avoir des écoutes bloquantes, plus faciles à gérer.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
Guillamue06
Messages postés157Date d'inscriptiondimanche 18 avril 2004StatutMembreDernière intervention11 juillet 20224 8 oct. 2011 à 09:16
Bon bah du coup j'ai complètement changé de méthode j'utilise TCPClient et TCPListen (je savais pas que ça existé)
C'est plus simple mais je suis quand même un peut déçu du côté "démerde toi" au niveau des données reçus et à envoyer :
Dim Stream As NetworkStream = LstClient(i).GetStream
Dim bytes(LstClient(i).ReceiveBufferSize) As Byte
Dim Numbytes As Integer = Stream.Read(bytes, 0, CInt(LstClient(i).ReceiveBufferSize))
Dim Recu As String = Encoding.ASCII.GetString(bytes, 0, Numbytes)
Tous ça pour recevoir un "flux" de données.
Comme dit plus haut je reviens de python est en python :