Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
Gambo
Newbie
Newbie

Anmeldedatum: 09.06.2010
Beiträge: 1

TCP/IP Verbindung hängt sich auf
Verfasst am: 09.06.2010, 19:51

Datenübertragung funktioniert nur manchmal
Hallo ersteinmal denn ich bin neu hier.
Ich habe ein Tool geschrieben mit dem es möglich sein soll Prozesse von einem anderen Rechner zu sehen und diese gegebenenfalls zu beenden. Die Prozesse sendet die Clientanwendung auf Anfrage an die Serveranwendung. Mein Problem ist, dass wenn ich einen Prozess beende oder mehrmals die Prozessliste neu lade sich die Liste nicht mehr aktualisiert sondern einfach leer bleibt. Da ich den Fehler leider nicht auf einen bestimmten Abschnitt eingrenzen kann muss ich den ganzen Quelltext geben. Ich programmiere noch nicht so lange mit Visual-Basic und würde mich deshalb auch freuen wenn ihr mir eine Rückmeldung geben könntet wie der Quelltext sonst so ist.

Gambo


Hier mein Server Quellcode
Code:
Imports System.Net.Sockets
Imports System.Net
Imports System.IO
Imports System.Threading.Thread


Public Class Form1

    Dim startkillProzess As String = "/functionkillProzess"
    Dim startTaskmgr As String = "/functionTaskmgr"
    Dim EndgetProzess As String = "/endgetprozess"

    Dim prozessbuffer As String
    Dim readbuffer As String
    Dim taskmgrbuffer As String

    Dim adresse As String
    Dim port As Integer = 4000

    Dim stream As NetworkStream

    Dim Server As TcpListener
    Public client As New TcpClient
    Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000)

    Dim readThread As Threading.Thread


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AktionenToolStripMenuItem.Enabled = False
    End Sub

    Private Sub ServerStartenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ServerStartenToolStripMenuItem.Click
        If client.Connected = True Then
            MsgBox("Server ist schon verbunden")
        Else
            mainserver()
        End If
    End Sub

    Private Sub mainserver()
        Server = New TcpListener(ipendpoint)
        Server.Start()

        client = Server.AcceptTcpClient
        Server.Stop()

        stream = client.GetStream

        MsgBox("Client verbunden")
        AktionenToolStripMenuItem.Enabled = True

        readThread = New Threading.Thread(AddressOf read)
        readThread.Start()
    End Sub

    Sub read()
        For infiniteCounter = 1 To 3
            infiniteCounter = 1

            stream = client.GetStream()
            Dim buffsize As Integer
            Dim instreambuffer(10024) As Byte
            buffsize = client.ReceiveBufferSize

            stream.Read(instreambuffer, 0, buffsize)

            readbuffer = System.Text.Encoding.ASCII.GetString(instreambuffer)

            Auswertung()
        Next
    End Sub

    Sub Auswertung()
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf Auswertung))
        Else
            Dim Selectbuffer() As String = Split(readbuffer, "$")

            Select Case Selectbuffer(0)
                Case "/functionTaskmgr"
                    taskmgrbuffer = readbuffer
                    Taskmgr()
                Case Else
                    MsgBox(Selectbuffer(0))
            End Select
        End If
    End Sub

    Private Sub TaskmangenerStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TaskmangenerToolStripMenuItem.Click
        Dim i As Integer = 0

        While i <> ProzessListe.Items.Count
            ProzessListe.Items.RemoveAt(i)
        End While
        SendStartTaskmgr()
    End Sub

    Sub SendStartTaskmgr()
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf SendStartTaskmgr))
        Else
            stream = client.GetStream
            Dim writebuffer() As Byte
            writebuffer = System.Text.Encoding.ASCII.GetBytes(startTaskmgr & "$")
            stream.Write(writebuffer, 0, writebuffer.Length)
            stream.Flush()
        End If
    End Sub

    Sub Taskmgr()
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf Taskmgr))
        Else
            Dim Prozesssplit() As String = Split(taskmgrbuffer, "$")

            Dim i As Integer = 1
            While String.Compare(Prozesssplit(i), EndgetProzess) <> 0
                ProzessListe.Items.Add(New ListViewItem(New String() {Prozesssplit(i), Prozesssplit(i + 1), Prozesssplit(i + 2)}))
                i = i + 3
            End While
            ProzessListe.Sort()
        End If

    End Sub

    Private Sub ProzessBeenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProzessBeendenToolStripMenuItem.Click
        If MsgBox("Sind sie sicher das sie den Prozess beenden möchten", vbYesNo) = vbYes Then

            Dim writebuffer() As Byte
            writebuffer = System.Text.Encoding.ASCII.GetBytes("/functionkillProzess$" & ProzessListe.FocusedItem.Text & "$")
            stream.Write(writebuffer, 0, writebuffer.Length)
            stream.Flush()
        Else
        End If
    End Sub

    Private Sub ProzessListe_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProzessListe.DoubleClick
        MsgBox(ProzessListe.FocusedItem.Text)
        MsgBox(ProzessListe.FocusedItem.Index)
    End Sub

    Private Sub Beenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click

        Try
            client.Client.Shutdown(SocketShutdown.Both)
        Catch
        End Try

        Try
            client.Close()
        Catch
        End Try

        Try
            Server.Stop()
        Catch
        End Try

        End
    End Sub

    Private Sub FensterSchließen_FormClosing(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        Try
            client.Client.Shutdown(SocketShutdown.Both)
        Catch
        End Try

        Try
            client.Close()
        Catch
        End Try

        Try
            Server.Stop()
        Catch
        End Try

    End Sub
End Class





Und hier mein Client Quellcode


Code:
   Imports System.Net.Sockets
Imports System.Net
Imports System.IO
Imports System.Threading.Thread


Public Class Form1
    Dim stream As NetworkStream
    Dim Client As New TcpClient
    Dim IP As String = "gambo.selfip.com"
    Dim Port As Integer = 4000

    Dim getMessage As Threading.Thread

    Dim startTaskmgr As String = "/functionTaskmgr"
    Dim startkillProzess As String = "/functionkillProzess"
    Dim EndgetProzess As String = "/endgetprozess"
    Dim restart As String = "/restart"

    Dim stringexit As String
    Dim readbuffer As String


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        getMessage = New Threading.Thread(AddressOf read)
        mainserver()
    End Sub

    Sub mainserver()

newconnect:
        Try
            Client.Connect(IP, Port)

            stream = Client.GetStream

            stream = Client.GetStream

            getMessage.Start()

        Catch
            Sleep(1000)
            GoTo newconnect
        End Try

    End Sub

    Sub read()

        For infiniteCounter = 1 To 3
            infiniteCounter = 1


            stream = Client.GetStream()
            Dim buffsize As Integer
            Dim instreambuffer(10024) As Byte
            buffsize = Client.ReceiveBufferSize



            stream.Read(instreambuffer, 0, buffsize)

            readbuffer = System.Text.Encoding.ASCII.GetString(instreambuffer)

            Auswertung()
        Next


    End Sub

    Sub Auswertung()
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf Auswertung))
        Else
            Dim Selectbuffer() As String = Split(readbuffer, "$")

            Select Case Selectbuffer(0)
                Case "/functionTaskmgr"
                    Taskmgr()
                Case "/functionkillProzess"
                    Taskkill(Selectbuffer(1))
                Case Else
            End Select
        End If

    End Sub

    Sub Taskmgr()
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf Taskmgr))
        Else

            Dim Prozesslistbuffer As String = ""

            For Each Prozess As Process In Process.GetProcesses()
                Dim Prozessname As String = Prozess.ProcessName
                Dim Prozessid As String = Prozess.Id
                Dim Prozessbeschreibung As String = "testbeschreibung"
                Dim Prozessbuffer As String = Prozessname & "$" & Prozessid & "$" & Prozessbeschreibung & "$"
                Prozesslistbuffer = Prozesslistbuffer & Prozessbuffer
            Next Prozess
            Dim writebuffer() As Byte
            writebuffer = System.Text.Encoding.ASCII.GetBytes("/functionTaskmgr$" & Prozesslistbuffer & EndgetProzess & "$")
            stream.Write(writebuffer, 0, writebuffer.Length)
            stream.Flush()

            Prozesslistbuffer = ""
        End If

    End Sub

    Sub Taskkill(ByVal Prozessname As String)

        Dim proc As System.Diagnostics.Process
        Dim pList() As Process

        pList = Process.GetProcessesByName(Prozessname)
        For Each proc In pList
            proc.Kill()
        Next
    End Sub
End Class



Da dies mein erster Post ist hoffe ich, dass ich alles richtig gemacht habe und keine Regeln verletzt habe.
Anderenfalls bitte ich mach auf meinen Fehler hinzuweisen.
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: tcp, verbindung, hängt, client, thread, string

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 869 09.06.2011, 12:19
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2432 06.03.2008, 20:19
Keine neuen Beiträge ListView speichern & laden 1242 05.08.2008, 12:32
Keine neuen Beiträge Registry & Co Fragen 1101 03.05.2007, 09:57
Keine neuen Beiträge Listbox speichern & laden 2047 22.03.2007, 20:25
 



[ Time: 0.1462s ][ Queries: 81 (0.0302s) ][ GZIP on - Debug on ]