Tipp-Upload: VB.NET 0409: BeginAcceptTcpClient
von Paulch
Hinweis zum Tippvorschlag
Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Internet und Netzwerke
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
TcpClient,TcpListener,AcceptTcpClient,BeginAcceptTcpClient,AsyncCallback,EndAcceptTcpClient,Tcp
Der Vorschlag wurde erstellt am: 14.06.2011 15:55.
Die letzte Aktualisierung erfolgte am 14.06.2011 15:55.
Beschreibung
Der tipp beschreibt wie man einen TcpListener initialisiert, der asyncron auf Clients wartet, ggf. mit diesen kommuniziert, und schliesslich nach Beendigung der Verbindung auf einen neuen client wartet bis lokal der 'Server' runtergefahren wird.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' ------ Anfang Projektgruppe TestAsyncTcpListener.sln ------ ' ----- Anfang Projektdatei TestAsyncTcpListener.vbproj ----- ' ------------------- Anfang Datei Main.vb ------------------- Option Strict On Imports System Imports System.Net Imports System.Net.Sockets Imports System.Threading Public Class Main Public Shared mreSemaphore As New ManualResetEvent(False) Public Shared blnSemaphore As Boolean = False Public Shared Sub Main() Dim port As Int32 = 22022 ' Der listener hoert nur auf lokale clients (127.0.0.1:22022) Dim tcpl As TcpListener = New TcpListener(New IPEndPoint(IPAddress.Loopback, port)) Echo("Calling DoAcceptClient") Dim trdDAC As New Thread(New ParameterizedThreadStart(AddressOf DoAcceptClient)) blnSemaphore = True trdDAC.Start(tcpl) ' Warte bis der nutzer q in die Konsole eingibt. Do Until Console.ReadKey(True).KeyChar = "q" Loop Echo("Received quit command finalizing... ") blnSemaphore = False ' Semaphore -> Set mreSemaphore.Set() End Sub Public Shared Sub DoAcceptClient(objListener As Object) Dim listener As TcpListener = CType(objListener, TcpListener) While blnSemaphore Echo("Semaphore -> reset") mreSemaphore.Reset() Echo("Starting listener...") listener.Start() Echo("Waiting for connection... [BeginAcceptTcpClient]") listener.BeginAcceptTcpClient(New AsyncCallback(AddressOf _ DoAcceptClientCallback), listener) Echo("Semaphore -> waitone (set)") mreSemaphore.WaitOne() End While Echo("Left running loop!") End Sub Public Shared Sub DoAcceptClientCallback(ar As IAsyncResult) Dim listener As TcpListener = CType(ar.AsyncState, TcpListener) Echo("Casted listener [EndAcceptTcpClient]") Dim client As TcpClient = listener.EndAcceptTcpClient(ar) Echo("Receiving bytes...") Dim lb As Byte = 0 ' 0x71 entspricht 'q' Do Until lb = &H71 Dim bf() As Byte = New Byte() {0} client.Client.Receive(bf) lb = bf(0) Echo("Received byte: 0x" & Convert.ToString(lb, 16)) client.Client.Send(New Byte() {&H6}) Loop Echo("Client -> close") client.Close() Echo("Semaphore -> set") mreSemaphore.Set() End Sub Public Shared Sub Echo(msg As String) Console.WriteLine("[{0}]-: {1}", Thread.CurrentThread.ManagedThreadId, msg) End Sub End Class ' -------------------- Ende Datei Main.vb -------------------- ' ------ Ende Projektdatei TestAsyncTcpListener.vbproj ------ ' ------- Ende Projektgruppe TestAsyncTcpListener.sln -------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.