Problème Listview

Hgs5s9017fsooqjdyqjyeHzykdv Messages postés 2 Statut Membre -  
NICK337 Messages postés 23 Statut Membre -

Bonjour, je poste ce message car j'ai un problème en vb.net, sa fait depuis plusieurs semaines que j'essaye de faire un code vb.nrt qui écoute le port 8080 et qui réceptionne les sockets reçu et les "sépare", je m'explique, je veut pouvoir envoyer par exemple:

qlqchose1 || qlqchose2  || qlqchose3  || qlqchose4  || qlqchose5  || qlqchose6  || qlqchose7  || qlqchose8 || qlqchose9

Et voir que dans mon listview j'ai une ligne avec dans la première case écrit "qlqchose1", dans la 2eme case écrit "qlqchose2" etc.. biensur ici c'est un exemple mais c'est quelque chose comme sa que je veut.

PS: J'ai deja essayé plusieurs codes que je n'ai plus mais aucun n'a marché.

Merci d'avance

3 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     

    Peux-tu montrer ce que tu as essayé ?
    Aussi, quel est le point de blocage (mise en écoute, réception, traitement, autre) ?

    Car selon ta description, un MaChaine.Split(...) serait suffisant.


    0
    1. Hgs5s9017fsooqjdyqjyeHzykdv Messages postés 2 Statut Membre
       

      Bonsoir, oui bien sur voici le code ( je suis débutant le code est donc pas très adapté car j'aurrais peut être pu utiliser des boucles )

      Imports System.Net
      Imports System.Net.Sockets
      Imports System.Text
      
      Public Class Form1
          Dim listener As TcpListener
          Dim client As TcpClient
          Dim stream As NetworkStream
          Dim data As Byte()
          Dim message As String = ""
      
          Private Sub RAT_Load(sender As Object, e As EventArgs) Handles MyBase.Load
              listener = New TcpListener(IPAddress.Any, 8080)
              listener.Start()
              Dim t As New Threading.Thread(AddressOf AcceptConnections)
              t.Start()
          End Sub
      
          Private Sub AcceptConnections()
              Try
                  While True
                      client = listener.AcceptTcpClient()
                      stream = client.GetStream()
                      data = New Byte(1024) {}
                      Dim bytesRead As Integer = 0
      
                      Do
                          bytesRead = stream.Read(data, 0, data.Length)
                          Dim receivedData As String = Encoding.ASCII.GetString(data, 0, bytesRead)
                          message = receivedData
                      Loop While bytesRead > 0
                  End While
              Catch ex As Exception
                  ' Gère les exceptions ici
              End Try
      
              Dim parts() As String = message.Split(New String() {"||"}, StringSplitOptions.RemoveEmptyEntries)
              Dim t1 As String = ""
              Dim t2 As String = ""
              Dim t3 As String = ""
              Dim t4 As String = ""
              Dim t5 As String = ""
              Dim t6 As String = ""
              Dim t7 As String = ""
              Dim t8 As String = ""
              Dim t9 As String = ""
      
              If parts.Length >= 9 Then
                  t1 = parts(0).Trim()
                  t2 = parts(1).Trim()
                  t3 = parts(2).Trim()
                  t4 = parts(3).Trim()
                  t5 = parts(4).Trim()
                  t6 = parts(5).Trim()
                  t7 = parts(6).Trim()
                  t8 = parts(7).Trim()
                  t9 = parts(8).Trim()
              End If
      
              Dim Element As New ListViewItem
              Element.Text = t1
              Element.SubItems.Add(t2)
              Element.SubItems.Add(t3)
              Element.SubItems.Add(t4)
              Element.SubItems.Add(t5)
              Element.SubItems.Add(t6)
              Element.SubItems.Add(t7)
              Element.SubItems.Add(t8)
              Element.SubItems.Add(t9)
              ListView1.Items.Add(Element)
          End Sub
      
          Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
              If Not client Is Nothing Then
                  client.Close()
              End If
              If Not listener Is Nothing Then
                  listener.Stop()
              End If
          End Sub
      End Class
      
      0
  2. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     

    Désolé pour le délai de réponse.

    Le premier truc qui me chagrine c'est que ton code de découpage est posé après ton while true.

    Ensuite, si tu veux que ton code fasse quelque chose, il faut plutôt déporter ton code de découpage dans une fonction et appeler cette fonction à la réception de ta chaine via le socket.

    Concernant le fait que tu va passer par un thread, il faudra que tu utilise un Me.Invoke (AdressOf ...) pour faire la mise à jour, car la mise à jour de contrôles dans un autre thread que celui principal est interdite (ou peut provoquer un comportement inattendu).

    Autre point, pourquoi créer plusieurs variables t* au lieu d'utiliser le tableau fourni par Split ? Cela te permettre de réduire ton code en utilisant des boucles For.

    Voilà pour un premier tour.


    0
  3. NICK337 Messages postés 23 Statut Membre
     

    Bonjour, voici un exemple de code qui pourrait vous aider à résoudre votre problème. Ce code crée un serveur TCP qui écoute sur le port 8080. Lorsqu’il reçoit des données, il les divise en utilisant “||” comme séparateur et les ajoute à un ListView.

    Imports System.Net.Sockets
    Imports System.Text
    
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim server As New TcpListener(8080)
            server.Start()
    
            Dim client As TcpClient = server.AcceptTcpClient()
            Dim stream As NetworkStream = client.GetStream()
    
            Dim bytes(client.ReceiveBufferSize) As Byte
            stream.Read(bytes, 0, CInt(client.ReceiveBufferSize))
    
            Dim data As String = Encoding.ASCII.GetString(bytes)
            Dim items As String() = data.Split(New String() {"||"}, StringSplitOptions.None)
    
            For Each item As String In items
                ListView1.Items.Add(item)
            Next
    
            client.Close()
            server.Stop()
        End Sub
    End Class
    

    Veuillez noter que ce code est très basique et ne gère pas les erreurs ou les exceptions. Vous devrez l’adapter à vos besoins spécifiques. De plus, ce code bloque l’interface utilisateur jusqu’à ce qu’une connexion soit établie, ce qui n’est généralement pas souhaitable dans une application réelle. Vous voudrez peut-être exécuter le code du serveur dans une autre thread pour éviter ce problème. Bien à vous

    0