Server Client - Textfilterproblem

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Chris2208.

    Chris2208 schrieb:

    und man kann sich das was man braucht herausnehmen.
    Also:
    In einem Socket bekommst Du ein ByteArray, das Du in einen String konvertierst. Mit diesem String machst Du im obigen Code (Post #4) dies hier:

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. xml.AddRange(empfang) ' Deine Daten
    Da ist es egal, ob das eine Zeile oder mehrere Zeilen sind.
    Aufpassen musst Du, dass bei einem leeren <event>-Member die Syntax antgegen Deinem Empfang so ist: <event/>.
    Füge also ggf. noch diese Zeile ein:

    VB.NET-Quellcode

    1. empfang = empfang.Replace("</event>", "<event/>")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, das

    Quellcode

    1. xml.AddRange(empfang) ' Deine Daten


    ist ja schon im Code vorhanden, wenn ich dich richtig verstehe, empfange ich hier die Daten von diesem Code


    Quellcode

    1. Dim empfang() = {"<name>Test Status</name>", "<address>0000</address>", "<type>9999</type>", "<timestamp>1455871174452</timestamp>", "<flags>0</flags>", "<user>Tester</user>", "<event/>"}


    hier empfange ich aber einen vorgegebenen Text wie " Test Status" also muss ich nach dem "Dim empfang() =" etwas anderes eintragen oder was ändert sich im Code sonst ausser das

    Quellcode

    1. empfang = empfang.Replace("</event>", "<event/>")



    Chris

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Chris2208“ ()

    Chris2208 schrieb:

    etwas anderes eintragen
    Nein. Das sind die Daten, die Du aus dem Socket ausliest.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Chris2208 schrieb:

    etwas steht
    Ich habe den Text, den Du empfängst, als BlackBox behandelt.
    Du musst nun ein wenig mit dem Code spielen, um ihn zu verstehen.
    Zum Ablauf:
    Du empfängst iwelche Daten, deren Syntax der einer serialisierten Klasse entspricht.
    Diese Syntax wird vervollständigt und deserialisiert.
    Als Resultat bekommst Du eine Instanz einer Datenklasse, die Du auslesen kannst.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Chris2208 schrieb:

    hinbekommen
    Poste mal den Code, wo Du die Daten vom socket empfängst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    bitte sehr!

    Quellcode

    1. Public Class Form1
    2. Dim listener As New TcpListener(8000)
    3. Dim client As TcpClient
    4. Dim message As String
    5. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    6. listener.Stop()
    7. Application.Exit()
    8. End Sub
    9. Private Sub Form1_Load(ByVal Bsender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    10. listener.Start()
    11. Dim listthread As New Thread(New ThreadStart(AddressOf listening))
    12. listthread.Start()
    13. Private Sub listening()
    14. listener.Start()
    15. End Sub
    16. Private Sub tmrlistener_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrlistener.Tick
    17. If listener.Pending = True Then
    18. message = ""
    19. client = listener.AcceptTcpClient()
    20. Dim reader As New StreamReader(client.GetStream())
    21. While reader.Peek > -1
    22. message = message + Convert.ToChar(reader.Read()).ToString
    23. End While
    24. rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Er: " & message & vbCrLf)
    25. End If
    26. End Sub


    Grus Chris
    @Chris2208 Das soll Dein Code sein?
    Da fehlt ja vor Private Sub listening() ein End Sub.
    Warum startest Du den listener einmal im Form_Load und dann noch einmal in einer Thread-Prozedur?
    Vielleicht liest Du erst mal, wie solch funktioniert. Gugst Du hier.
    =============
    An dieser Stelle hast Du den Text, da müsste mein Code aufgerufen werden:

    VB.NET-Quellcode

    1. rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Er: " & message & vbCrLf)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist der ganze Code, ich hab nur Ausschnitte eingefügt, da hab ich dann wohl was vergessen!


    Quellcode

    1. Public Class Form1
    2. Dim listener As New TcpListener(8000)
    3. Dim client As TcpClient
    4. Dim message As String
    5. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    6. listener.Stop()
    7. Application.Exit()
    8. End Sub
    9. Private Sub Form1_Load(ByVal Bsender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    10. listener.Start()
    11. Dim listthread As New Thread(New ThreadStart(AddressOf listening))
    12. listthread.Start()
    13. Form2.Show()
    14. End Sub
    15. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsendMsg.Click
    16. If rtbTextToSend.Text = "" Then
    17. MsgBox("Geben Sie einen Text ein", MsgBoxStyle.Exclamation, "Zu sendender Text fehlt!")
    18. Else
    19. Try
    20. client = New TcpClient(tbip.Text, 8000)
    21. Dim writer As New StreamWriter(client.GetStream())
    22. writer.Write(rtbTextToSend.Text)
    23. rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Du: " & rtbTextToSend.Text & vbCrLf)
    24. rtbTextToSend.Clear()
    25. writer.Flush()
    26. Catch ex As Exception
    27. MsgBox("Fehler")
    28. End Try
    29. End If
    30. End Sub
    31. Private Sub tmrlistener_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrlistener.Tick
    32. If listener.Pending = True Then
    33. message = ""
    34. client = listener.AcceptTcpClient()
    35. Dim reader As New StreamReader(client.GetStream())
    36. While reader.Peek > -1
    37. message = message + Convert.ToChar(reader.Read()).ToString
    38. End While
    39. rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Er: " & message & vbCrLf)
    40. End If
    41. End Sub
    42. Private Sub rtbTextToSend_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles rtbTextToSend.KeyDown
    43. If e.KeyCode = Keys.Enter Then
    44. btnsendMsg.PerformClick()
    45. End If
    46. End Sub



    Der Code war ursprünglich für ein Chatprogramm gedacht, damit ich mal etwas von einem Server empfangen kann, hab ich mir diesen Code genommen und baue den dann für mein Vorhaben um!

    Chris

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Chris2208“ ()

    Chris2208 schrieb:

    hab ich mir diesen Code genommen und baue den dann für mein Vorhaben um!
    Dann poste mal die umgebaute Variante.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    naja, es scheitert eigentlich nur an dem Textfilter, hier weiss ich nicht, wie ich den einbaue so das die Filterung automatisch bei Empfang einer Nachricht funktioniert.

    Ich Empfange die Nachricht in der "rtbReceivedText" und möchte eben hier den Textfilter einbauen! Entweder soll der gefilterte Text schon in der "rtbReceivedText" ankommen oder ich füge eine neue RichTextBox hinzu wo dann die gefilterte Nachricht eingefügt wird, ganz gleich...



    Mom. hab ich es so laufen, dass ich zuerst eine Box habe, wo der ungefilterte Text ankommt ( rtbReceiveText) und dann soll der Text gefiltert werden, was ich eben nicht weiss wie zum einbauen und danach übergebe ich den Text in eine Neue Box:


    In diesen Code könnte man den Filter einbauen!?? Momentan hab ich es so laufen, steht etwas in der rtbReceivedText, übergibt er den "fertigen" Text in die txbStatus, dazwischen sollte eben der Filter zum Einsatz kommen!!

    Quellcode

    1. Private Sub rtbReceivedText_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtbReceivedText.TextChanged
    2. If rtbReceivedText.Text = "" Then txbstatus.Text = ""
    3. Else
    4. txbstatus.Text = rtbReceivedText.Text
    5. End If


    Gruss Chris

    Chris2208 schrieb:

    den Textfilter einbauen!
    Schreib ne Prozedur, der Du den String übergibst, die ansonsten meinen Code enthält (statt Vorgabe des Strings Verwenden des Parameters).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Chris2208 schrieb:

    in einer TextBox empfangen werden
    In einer TextBox können keine Daten empfangen werden.
    Du empfängst Daten von einem Socket und stellst sie in einer TextBox dar.

    Chris2208 schrieb:

    VB.NET-Quellcode

    1. While reader.Peek > -1
    2. message = message + Convert.ToChar(reader.Read()).ToString
    3. End While
    4. ' @@@@@ hier liegen die empfangenen Daten vor
    5. rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Er: " & message & vbCrLf)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!