Problème Listview

Fermé
Hgs5s9017fsooqjdyqjyeHzykdv Messages postés 2 Date d'inscription dimanche 29 octobre 2023 Statut Membre Dernière intervention 29 octobre 2023 - 29 oct. 2023 à 15:24
NICK337 Messages postés 9 Date d'inscription vendredi 3 juillet 2015 Statut Membre Dernière intervention 13 décembre 2023 - 7 nov. 2023 à 23:23

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

NHenry Messages postés 15183 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 5 janvier 2025 350
29 oct. 2023 à 17:30

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
Hgs5s9017fsooqjdyqjyeHzykdv Messages postés 2 Date d'inscription dimanche 29 octobre 2023 Statut Membre Dernière intervention 29 octobre 2023
Modifié le 31 oct. 2023 à 20:48

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
NHenry Messages postés 15183 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 5 janvier 2025 350
31 oct. 2023 à 19:56

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
NICK337 Messages postés 9 Date d'inscription vendredi 3 juillet 2015 Statut Membre Dernière intervention 13 décembre 2023
7 nov. 2023 à 23:23

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