Problème Listview

-  

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. 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
    1. Modérateur

      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
      1. Modérateur

        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. 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