vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
tcplistener empfängt nur ein mal und danach nicht mehr 
Autor: lastyle
Datum: 18.10.21 12:48

Hallo zusammen

Ich habe einen tcplistener in einem thread laufen. Damit möchte ich einen Client überwachen der connected, daten schickt und danach die connection droppt.

Sobald ein Client connected wird auch der komplette Datensatz empfangen und in eine textbox geschrieben, aber beim reconnect versuch kommt kein neuer Datensatz an. Bzw weiß ich noch nicht einmal ob überhaupt eine verbindung zustande kommt weil der tcplistener es nicht bemerkt hat das die connection gedroppt wurde.

Was mache ich falsch mit meinem code oder wie kann ich den connection drop auswerten und dann quasi bei null wieder abhören ?

Aktueller code ist

Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Imports System.Text
Public Class Form1
    Dim stream As NetworkStream
    Dim streamw As StreamWriter
    Dim server As TcpListener
    Dim client As New TcpClient
    Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 1581)
    Dim t As New Threading.Thread(AddressOf Main)
    Dim datastring As String = Nothing
    Public bbsdata As String = Nothing
    Public bbsdataprevious As String = Nothing
 
    Sub Main()
        Try
            server = New TcpListener(ipendpoint)
            server.Start()
            client = server.AcceptTcpClient
            client.ReceiveBufferSize = 1024
            Dim ns As NetworkStream = client.GetStream
            Dim data(client.ReceiveBufferSize) As Byte
            datastring = ""
            '---read incoming stream; Read() is a blocking call---
            Dim numBytesRead As Integer = ns.Read(data, 0, CInt( _
              client.ReceiveBufferSize))
            Dim z As Integer = 0
            While (numBytesRead <> 0)
                datastring = Encoding.ASCII.GetString(data, 0, numBytesRead)
                System.Diagnostics.Debug.WriteLine(Encoding.ASCII.GetString( _
                  data, 0, numBytesRead))
                SetTextBoxInfo(datastring)
            End While
        Catch
        End Try
    End Sub
    Public Sub SetTextBoxInfo(stringValue As String)
        If stringValue <> bbsdataprevious Then
            bbsdataprevious = stringValue
            Me.BeginInvoke(Sub() Me.TextBox2.Text = stringValue)
            datastring = ""
            client.Close()
            stream.Close()
        Else
        End If
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        If Button1.Text = "Start" Then
            t.Start()
            Button1.Text = "Stop"
        Else
            client.Close()
            stream.Close()
 
            Button1.Text = "Start"
        End If
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: tcplistener empfängt nur ein mal und danach nicht mehr 
Autor: Kuno60
Datum: 18.10.21 13:54

Hallo,

also was mir gleich auffällt:

Bei: While (numBytesRead <> 0), wird abgebrochen, wenn keine Daten mehr vorhanden sind. Um ständig Nachrichten empfangen zu können, musst du das Ganze in eine Schleife packen. Mit client.Available kannst du prüfen, ob Daten eingetroffen sind.

Dim stream As NetworkStream
Dim streamw As StreamWriter
wird in deinem Code nicht verwendet.

Dim data(client.ReceiveBufferSize) As Byte --> Dim data(client.ReceiveBufferSize - 1) As Byte

Dim numBytesRead As Integer = ns.Read(data, 0, CInt(client.ReceiveBufferSize))
CInt ist überflüssig.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: tcplistener empfängt nur ein mal und danach nicht mehr 
Autor: lastyle
Datum: 18.10.21 20:18

Danke, das waren teilweise "Dateileichen" von vorherigen Versuchen noch drin die ich noch nicht rausgemacht hab.

Es funktioniert jetzt und zwar so.

    Sub Main()
        server = New TcpListener(ipendpoint)
        server.Start()
 
        While (True)
            Try
                client = server.AcceptTcpClient
                client.ReceiveBufferSize = 1024
                Dim ns As NetworkStream = client.GetStream
                Dim data(client.ReceiveBufferSize) As Byte
                datastring = ""
                '---read incoming stream; Read() is a blocking call---
                Dim numBytesRead As Integer = ns.Read(data, 0, _
                  client.ReceiveBufferSize)
                Dim z As Integer = 0
 
                client = server.AcceptTcpClient
                'Do something with your client.
 
                datastring = Encoding.ASCII.GetString(data, 0, numBytesRead)
                System.Diagnostics.Debug.WriteLine(Encoding.ASCII.GetString( _
                  data, 0, numBytesRead))
                SetTextBoxInfo(datastring)
 
                client.Close()
            Catch
            End Try
        End While
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel