TCP Client und Server Syncronisieren

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Dende().

    TCP Client und Server Syncronisieren

    Hey Leute, ich mal wieder ^^

    Ich habe ein Programm geschrieben, welches Systeminformationen an einen Server senden soll, bislang klappt das alles super, doch jetzt wollte ich die Prozesse übertragen und bin dann auf ein klitzekleines Problem gestossen :/
    Und zwar:

    Wenn ich den Clienten mit dem Server verbinde, sendet er in einer For Each schleife die Prozesse über den StreamWriter zum Server
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ProcessList()
    2. Dim pc As System.Diagnostics.Process
    3. Threading.Thread.Sleep(1000)
    4. For Each pc In System.Diagnostics.Process.GetProcesses()
    5. mobjStreamWriter.WriteLine(pc.ProcessName)
    6. Next
    7. mobjStreamWriter.WriteLine("ListEnde")
    8. mobjStreamWriter.Flush()
    9. End Sub


    soweit so gut...
    Und nun will ich es auf der Serverseite empfangen, aber das was ankommt ist nicht "der Wahrheit" bzw kommt nur jeder 2. Prozess an
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub GetProcessList()
    2. Dim objConnect As New clsConnection(mobjClient.GetStream)
    3. Dim blnEnde As Boolean = False
    4. Dim strProcess As String
    5. objConnect.StreamReader = New StreamReader(objConnect.Stream)
    6. objConnect.StreamWriter = New StreamWriter(objConnect.Stream)
    7. Do
    8. 'objConnect.StreamWriter.WriteLine("DING")
    9. strProcess = objConnect.StreamReader.ReadLine
    10. If objConnect.StreamReader.ReadLine = "ListEnd" Then
    11. blnEnde = True
    12. Else
    13. Me.Invoke(New AddProcessDelegate(AddressOf GetList), strProcess)
    14. End If
    15. Loop Until blnEnde = True
    16. End Sub


    Ich frage mich nun, was mache ich falsch, bzw gibt es einen besseren Weg zu übertragen ?

    Danke schon mal im vorraus :)

    Mfg
    Dende()
    :huh:
    du liest da eine neue zeile ein ....

    wenn dus so haben willst musste es so machen ...

    VB.NET-Quellcode

    1. Private Sub GetProcessList()
    2. Dim incoming as String = nothing
    3. Dim objConnect As New clsConnection(mobjClient.GetStream)
    4. Dim blnEnde As Boolean = False
    5. Dim strProcess As String
    6. objConnect.StreamReader = New StreamReader(objConnect.Stream)
    7. objConnect.StreamWriter = New StreamWriter(objConnect.Stream)
    8. Do
    9. 'objConnect.StreamWriter.WriteLine("DING")
    10. incoming = objConnect.StreamReader.ReadLine
    11. If incoming = "ListEnd" Then
    12. blnEnde = True
    13. Else
    14. Me.Invoke(New AddProcessDelegate(AddressOf GetList), incoming)
    15. End If
    16. Loop Until blnEnde = True
    17. End Sub


    durch

    VB.NET-Quellcode

    1. objConnect.StreamReader.ReadLine


    wartet dein programm bis was neues lesbares rein kommt... sprich du nimmst jedes 2te incoming und kickst es so gesehen weg weil du nochmal ne abfrage machst...
    lg
    Jou Danke hat geholfen :)

    Aaaber :D ein anderes Problem :(

    Er läd die Daten nicht richtig in die Listbox und wenn ich debugge sieht man wie er jedes einzelne Item reinläd, hinterher sieht man aber nur jedes 2. in der Listbox :/

    Spoiler anzeigen

    VB.NET-Quellcode

    1. For Each strProcess As String In IO.File.ReadAllText("C:\" & lsbComputer.SelectedItem & "ProcessList.txt").Split(vbNewLine)
    2. If objStreamReaderProcess.ReadLine = Nothing Then
    3. Exit For
    4. Else
    5. lsbProcess.Items.Add(objStreamReaderProcess.ReadLine)
    6. End If
    7. Next
    versuchs so

    VB.NET-Quellcode

    1. dim tempvar as string
    2. For Each strProcess As String In IO.File.ReadAllText("C:\" & lsbComputer.SelectedItem & "ProcessList.txt").Split(vbNewLine)
    3. tempvar = objStreamReaderProcess.ReadLine
    4. If tempvar = Nothing Then
    5. Exit For
    6. Else
    7. lsbProcess.Items.Add(tempvar)
    8. End If
    9. Next


    zur erklärung hast den gleichen fehler wieder gehmacht wie oben bei der if schleife eine zeile gelesen und beim schreiben in die listbox au eine zeile gelesen.... so geht des aber nit!

    auf gut deutsch du hast nur jede 2te zeile in die listbox geschrieben ...

    lg