| |
VB.NET - Fortgeschrittenetcplistener 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 | |
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. | |
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 | |
| 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 |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|