Hallo zusammen,
habe gerade eine mögliche Lösung gefunden. Ich habe die sen-Funktion in eine while(1) Schleife gesetzt und das wiederum in einen Thread:
Sub Main()
'Erstellen des TCP-Threads für den Empfang des ZCodes und der UserID von
' der Zentrale
Dim tcp As New ThreadStart(AddressOf tcpZentrale)
Dim tcpThread As New Thread(tcp)
'Erstellen des UCP-Threads für das Senden des ZCodes an den Client
Dim udp As New ThreadStart(AddressOf udpSenden)
Dim udpThread As New Thread(udp)
Dim anfrage(10), bestaetigung(10) As Byte
ReDim arrAnzahlUser(anzUser - 1)
Dim ID1, ID2 As UserDaten
'User 1
ID1.code = "1100"
ID1.UserID = "01"
'User 2
ID2.code = "2200"
ID2.UserID = "02"
arrAnzahlUser(0) = ID1
arrAnzahlUser(1) = ID2
'TCP-Thread starten:
'tcpThread.Priority = ThreadPriority.AboveNormal
tcpThread.Start()
'Thread starten und gleich in die Warteschlange versetzen
udpThread.Start()
udpThread.Suspend()
Dim IpHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim serverEndPoint As New IPEndPoint(IpHostInfo.AddressList(0), 3333)
'Serverdaten:
Console.WriteLine("Port des Servers: {0}", serverEndPoint.Port.ToString())
Console.WriteLine("IP des Servers: {0}" & CrLf, _
serverEndPoint.Address.ToString())
While (1)
Dim server As New Socket(AddressFamily.InterNetwork, _
SocketType.Dgram, ProtocolType.Udp)
'Das Binden des ServerSockets ist für die ReceiveFrom-Funktion
' vorausgesetzt.
server.Bind(serverEndPoint)
Try
'Empfangen des Codes
server.ReceiveFrom(anfrage, clientEndPoint)
Console.WriteLine("Habe Anfrage des Client erhalten: {0}" & CrLf, _
Encoding.ASCII.GetString(anfrage))
Dim user As String = Encoding.ASCII.GetString(anfrage).TrimEnd( _
NullChar)
Zcode = vergleich(user, arrAnzahlUser)
strCode = Encoding.ASCII.GetBytes(Zcode)
'Clientdaten:
Console.WriteLine("Port des Client: {0}", _
clientEndPoint.Port.ToString())
Console.WriteLine("IP des Client: {0}" & CrLf, _
clientEndPoint.Address.ToString())
'Senden des Codes
server.SendTo(strCode, clientEndPoint)
Console.WriteLine("Code an Client gesendet: {0}" & CrLf, zcode)
udpThread.Resume()
'Bestätigung abwarten
Console.WriteLine("Warte auf Bestätigung des Client...")
Do
server.ReceiveFrom(bestaetigung, clientEndPoint)
Loop While Not (Encoding.ASCII.GetString(bestaetigung).TrimEnd( _
NullChar) Like "OK")
Console.WriteLine("Habe Bestätigung erhalten: {0}" & CrLf, _
Encoding.ASCII.GetString(bestaetigung).TrimEnd(NullChar))
udpThread.Suspend()
Catch e As Exception
Console.WriteLine(e.ToString())
Finally
server.Close()
End Try
End While
Console.ReadLine()
End Sub
'UDP-Thread: nur die send-Funktion für das erneute Senden des ZCodes ist
' in diesem Thread enthalten.
Public Sub udpSenden()
While (1)
'Clientdaten:
Thread.Sleep(2000)
'Senden des Codes
server.SendTo(strCode, clientEndPoint)
Console.WriteLine("Code an Client gesendet: {0}" & CrLf, zcode)
End While
Console.ReadLine()
End Sub Aber danke für die Antwort, ich werde mal die anderen Beiträge durchsuchen. Es gibt bestimmt noch bessere Lösungen.
Ein weiteres Problem bei meiner ist, falls die Bestätigung nie eintrifft, wird der Code alle 2 Sekunden gesendet, für immer... tja...  |