vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Fortgeschrittene
TCP Listener (Server) 
Autor: crivi
Datum: 06.06.05 16:43

Hallo zusammen.

Ich versuche gerade eine Art Mail Server zu machen. Allerdings soll dieser keine Mails sondern Nachrichten empfangen, welche er danach als SMS weiterverschickt.

Ich habe folgenden Code von C# in VB.Net umgewandelt.

Imports System
Imports System.Threading
Imports System.Net.Sockets
Imports System.Text
Public Class TcpSvr
    Public MaxThreads As System.Int16
    Private ActiveThreads As Long
    Private ThreadIndex As System.Int16
    Private StopListener As System.Boolean
    Private Listener As TcpListener
    Public Port As System.Int32
    Private ASCII As ASCIIEncoding
 
    Public Sub New()
        StopListener = False
        ActiveThreads = 0
        ASCII = New ASCIIEncoding
    End Sub
 
    Public Sub Start()
        Console.WriteLine("Listener starten...")
        Dim ipAdd = System.Net.IPAddress.Parse("192.168.16.16")
        Listener = New TcpListener(ipAdd, Port)
        Listener.Start()
        MultiThread()
        Console.WriteLine("Listener stoppen...")
        Listener.Stop()
    End Sub
 
    Public Sub MultiThread()
        Dim CurThreadStart As ThreadStart
        Dim CurThread As Thread
        Dim ThreadCount As System.Int16
        Console.WriteLine("MaxThreads: " + MaxThreads.ToString)
        Console.WriteLine("Threading starten...")
        While StopListener = False
            If Listener.Pending = False Then
                ' continue 
            End If
            If ActiveThreads = MaxThreads Then
                ' continue 
            End If
            Console.WriteLine("Request 1")
            CurThreadStart = AddressOf Request
            CurThread = New Thread(CurThreadStart)
            CurThread.Start()
            SyncLock CurThread
                System.Math.Min(System.Threading.Interlocked.Increment( _
                  ActiveThreads), ActiveThreads - 1)
            End SyncLock
        End While
    End Sub
 
    Public Sub Request()
        Console.WriteLine("Request bearbeiten")
        Dim CurThread As Thread
        Dim CurSocket As Socket
        Dim Buffer As Byte()
        Dim Bytes As System.Int32
        Dim Temp As System.String
        Buffer = New Byte(256) {}
        CurThread = Thread.CurrentThread
        CurSocket = Listener.AcceptSocket
 
        While StopListener = False
            If CurSocket.Available > 0 Then
                Try
                    Bytes = CurSocket.Receive(Buffer, Buffer.Length, 0)
                    Temp = ASCII.GetString(Buffer, 0, Bytes)
                    Console.WriteLine("Eingabe: " + Temp)
 
                    If Temp.Substring(0, 1) = "q" Then
                        CurSocket.Send(ASCII.GetBytes("schon Schluss?"))
                        StopListener = True
                    End If
                Catch e As Exception
                    Console.WriteLine("Fehler: " + e.Message)
                End Try
            End If
        End While
 
        CurSocket.Close()
 
        SyncLock CurThread
            System.Math.Max(System.Threading.Interlocked.Decrement( _
              ActiveThreads), ActiveThreads + 1)
        End SyncLock
    End Sub
End Class
Public Shared Sub Main()
        Dim TcpSvr As TcpSvr
        TcpSvr = New TcpSvr
        TcpSvr.MaxThreads = 500
        TcpSvr.Port = 25
        Console.WriteLine("TcpServer starten...")
        TcpSvr.Start()
    End Sub
Jetzt habe ich folgende Probleme:

Wenn ich telnet 192.168.16.16 25 eingebe, reagiert das Programm. Und wenn ich dann q drücke erscheint folgender Fehler:

Eine nicht behandelte Ausnahme des Typs 'System.Net.Sockets.SocketException' _
  ist in system.dll aufgetreten.
 
Zusätzliche Informationen: Ein Blockierungsvorgang wurde durch einen Aufruf von _
  WSACancelBlockingCall unterbrochen
Was ist da dran falsch?

Wenn ich q drücke, schliesst sich danach das Programm. Das sollte nicht sein, denn es muss immer laufen. Woran liegt das?

Habe ich vielleicht etwas falsch übersetzt?

Vielen Dank

Gruss Raffi
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TCP Listener (Server)3.061crivi06.06.05 16:43
Re: TCP Listener (Server)1.248ReinhardH08.06.05 15:53
Re: TCP Listener (Server)1.302crivi09.06.05 00:03
Re: TCP Listener (Server)1.175crivi09.06.05 10:38
Re: TCP Listener (Server)1.296ReinhardH10.06.05 00:30

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-2025 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