Die Klasse UDPSocket (gb.net) ermöglicht es Gambas-Programmen über UDP-Sockets zu kommunizieren. Die Klasse erbt von der Stream-Klasse, so dass Sie Standard-Stream-Methoden zum Lesen, Schreiben und Schließen des Sockets verwenden können.
Im Gegensatz zum TCP-Protokoll arbeitet das UDP-Protokoll (User Datagram Protocol) verbindungslos. Das bedeutet, dass zwischen zwei Programmen mit UDP-Sockets keine Netzverbindung mit kontrolliertem Datenfluss besteht. Daher werden Sie die beiden Methoden Listen() und Accept() bei UDP-Sockets nicht finden. Es gibt auch keine Bestätigung, ob die Daten – sogenannte Datagramme – beim Kommunikationspartner angekommen sind. Es werden nur Datagramme gesendet beziehungsweise empfangen. Nicht nur deshalb gilt das UDP-Protokoll als unsicheres Protokoll.
Gut zu wissen:
Die zuletzt aufgeführten Punkte werden in den folgenden Quelltext-Fragmenten für einen UDP-Server und einen UDP-Client umgesetzt:
UDP-Server:
Public UDPServerSocket As UDPSocket '-- Es wird ein UDP-Socket erzeugt ▶ SERVER UDPServerSocket = New UDPSocket As "UDPServerSocket" If UDPServerSocket.Status <= Net.Inactive Then UDPServerSocket.Port = Val(txbPort.Text) UDPServerSocket.Bind() Endif Public Sub UDPServerSocket_Read() Dim sBuffer, sQuote As String Read #UDPServerSocket, sBuffer, Lof(UDPServerSocket) '-- Run Service: Ausgabe eines zufälligen Zitates → Methode GetQuote(…) sQuote = GetQuote(sBuffer) '-- Ziel-Adressierung: Host und Port '-- Über die Eigenschaften UDPServerSocket.SourceHost und UDPServerSocket.SourcePort findet man heraus, '-- woher das Datagramm kam – wer der Absender war. Damit sind die Ziel-Informationen zum Senden komplett. UDPServerSocket.TargetHost = UDPServerSocket.SourceHost UDPServerSocket.TargetPort = UDPServerSocket.SourcePort '-- Das Zitat wird als Datagramm an das adressierte Ziel gesendet Write #UDPServerSocket, Trim(sQuote), Len(Trim(sQuote)) End
UDP-Client:
Public UDPClientSocket As UDPSocket '-- Es wird ein UDP-Socket erzeugt ▶ CLIENT UDPClientSocket = New UDPSocket As "UDPClientSocket" If UDPClientSocket.Status <= Net.Inactive Then UDPClientSocket.Port = 0 ' Standard-Port für einen UDP-Client UDPClientSocket.Bind() Endif Public Sub SendDatagram() '-- Ziel-Adressierung: Host und Port UDPClientSocket.TargetHost = txbHost.Text UDPClientSocket.TargetPort = txbPort.Text Inc Application.Busy '-- Ein Datagramm wird an das adressierte Ziel gesendet Write #UDPClientSocket, txbRequest.Text, Len(txbRequest.Text) Dec Application.Busy End
Die Klasse UDPSocket verfügt über diese Eigenschaften:
Eigenschaft | Datentyp | Beschreibung |
---|---|---|
Host | String | Gibt die IP-Adresse zurück, an die der UDP-Socket gebunden ist oder setzt sie. |
SourceHost | String | Liefert die IP-Adresse der Quelle zurück, wenn die Nachricht aus dem Internet kommt. |
SourcePort | Integer | Liefert den Port der Quelle zurück, wenn die Nachricht aus dem Internet kommt. |
SourcePath | String | Liefert den Pfad der Quelle zurück, wenn die Nachricht von einem lokalen Socket kommt. |
TargetHost | String | Definiert die IP-Adresse (Ziel), wenn die Nachricht ins Internet geht. |
TargetPort | Integer | Definiert den Port (Ziel), wenn die Nachricht ins Internet geht. |
TargetPath | String | Definiert den Pfad (Ziel), wenn die Nachricht an einen lokalen Socket geht. |
Path | String | Gibt den Pfad des lokalen Sockets zurück, zu dem verbunden werden soll oder legt den Pfad fest. |
Port | Integer | Gibt die Port-Nummer zurück, die zum Binden des UDP-Sockets verwendet wird oder legt sie fest. |
Status | Integer | Gibt den Status des UDPSockets als Konstante der Net-Klasse zurück → Kapitel 24.x.y. |
Timeout | Integer | Gibt den Timeout in Millisekunden zurück oder setzt ihn. |
Broadcast | Boolean | Diese Eigenschaft setzt oder löscht das Socket-Broadcast-Flag. |
Tabelle 24.1.3.0.1 : Eigenschaften der Klasse UDPSocket
Hinweise:
Die Klasse UDPSocket hat die folgenden Methoden:
Methode | Rückgabetyp | Beschreibung |
---|---|---|
Begin ( ) | - | Beginn der Pufferung der in den Stream geschriebenen Daten im Socket-Puffer, so dass beim Aufruf der Send-Methode alles gesendet wird. |
Close () | - | Schließt den UDP-Socket. |
Send ( ) | - | Sendet alle Daten auf einen Schlag, die seit dem letzten Aufruf der Begin()-Methode im Socket-Puffer gepuffert wurden. |
Bind ( ) | - | Bindet einen Socket an einen Host oder an einen Pfad, damit das Objekt mit dem Senden und Empfangen von Daten beginnen kann. |
Drop ( ) | - | Löscht alle Daten, die seit dem letzten Aufruf der Begin()-Methode im Socket-Puffer gepuffert wurden. |
Peek ( ) | String | Mit dieser Funktion können Sie Daten vom Socket empfangen. Sie darf nur verwendet werden, wenn die Verbindung aktiv ist (Status = Net.Connected), sonst wird ein Fehler ausgelöst. |
ReadLine ( [ Escape As String ] ) | String | Liest eine Textzeile aus dem Datenstrom, wie die bei der Anweisung LINE INPUT. |
Watch ( Mode As Integer, Watch As Boolean ) | - | Starten oder stoppen Sie die Überwachung des Stream-Datei-Deskriptors zum Lesen oder Schreiben, nachdem er geöffnet wurde. |
Tabelle 24.1.3.0.2 : Methoden der Klasse UDPSocket
Hinweise:
Die Klasse UDPSocket verfügt nur über diese beiden Ereignisse:
Ereignis | Beschreibung |
---|---|
Error ( ) | Dieses Ereignis tritt auf, wenn Anweisungen fehlgeschlagen sind. Zum Beispiel dann, wenn ein Bindungsversuch fehlschlug. Die Status-Eigenschaft hat dann einen negativen Wert, der den Fehlertyp widerspiegelt. Der UDP-Socket wird nach einem Fehler automatisch geschlossen! |
Read ( ) | Dieses Ereignis wird ausgelöst, wenn Daten vom Kommunikationspartner der anderen Seite der IP-Verbindung im Socket ankommen. |
Tabelle 24.1.3.0.3 : Ereignisse der Klasse UDPSocket
Hinweis zum Ereignis Error(): Die Kenntnis ausgewählter Fehler-Konstanten kann Ihnen helfen, den Grund für auftretende Fehler zu erkennen:
Artikel