open_socket_accept
— Öffnen eines Sockets, der Verbindungsanfragen zulässt.
open_socket_accept( : : Port, GenParamName, GenParamValue : AcceptingSocket)
open_socket_accept
öffnet einen Socket, der ankommende
Verbindungsanfragen akzeptiert. Dieser
Operator ist der notwendige erste Schritt, um einen
Kommunikationskanal zwischen zwei HALCON-Prozessen aufzubauen. Der
Socket horcht nach ankommenden Verbindungsanfragen auf dem durch
Port
bestimmten Port.
Mit dem Parameter 'protocol' kann das verwendete
Kommunikationsprotokoll
spezifiziert werden. Voreingestellt ist das 'HALCON' Protokoll ohne
festgelegte Adressfamilie. Somit wird entsprechend den aktuellen
Netzwerkeinstellungen des Rechners entweder IPv4 oder IPv6 automatisch
verwendet. Um eine bestimmte Adressfamilie auszuwählen, muss eine '4'
für IPv4 bzw. eine '6' für IPv6 an den Namen des Protokolls angehängt
werden. Z.B. bezeichnet 'HALCON4' eine HALCON Verbindung über IPv4.
Mögliche Werte für eine generische Socketkommunikation sind 'UDP'
und 'TCP' . Auch hier kann eine '4' oder '6' angehängt werden. Beide
Kommunikationspartner müssen dasselbe Protokoll verwenden. Der
Datenaustausch über generische Sockets erfolgt ausschließlich mit
send_data
und receive_data
.
Mit dem generischen Parameter 'address' kann das Socket angewiesen werden, nur Verbindungen zu akzeptieren, die an eine bestimme Adresse gerichtet sind. So würde der Wert 'localhost' das Socket anweisen, nur Verbindungen zu akzeptieren, die an die Netzwerkaddresse 'localhost' gerichtet sind, welche normalerweise der lokalen Loopback-Schnittstelle '127.0.0.1' entspricht.
Mit dem generischen Parameter 'timeout' kann ein Timeout
für diesen Socket angegeben werden. Er wird in der Einheit Sekunden
oder als Zeichenkette 'infinite' angegeben und ist
im Besonderen dazu bestimmt, den Timeout und Wartemodus für einen folgenden
socket_accept_connect
Operatoraufruf, bei dem der Parameter Wait auf
'auto' gesetzt ist, zu setzen.
Mit dem generischen Parameter 'string_encoding' kann die Kodierung
für das Senden und Empfangen von Zeichenketten angegeben werden. Die
Kodierung wird für send_tuple
, receive_tuple
,
send_data
und receive_data
verwendet. Wenn das
Kommunikationsprotokoll 'HALCON' verwendet wird, hat diese
Einstellung nur Auswirkungen auf Verbindungen mit HALCON Versionen vor 18.11.
Wenn der Kommunikationspartner eine HALCON Version 18.11 oder neuer
verwendet, wird UTF-8 bei der Kodierung von Tupeln verwendet.
Mit dem generischen Parameter 'reuseaddr' kann die Einstellung
der Socket Option SO_REUSEADDR
kontrolliert werden.
Der Standardwert ist 'true' .
Hat 'reuseaddr' den Wert 'false' , so wird
SO_REUSEADDR
nicht gesetzt.
Auf Windows Systemen werden konkurrierende Zugriffe auf einem einzelnen
Anschluss nur detektiert, wenn 'reuseaddr' auf den Wert
'false' gesetzt ist.
Der akzeptierende Socket wird in AcceptingSocket
zurückgegeben.
open_socket_accept
kehrt
sofort zurück, ohne auf eine Verbindungsanfrage eines anderen Prozesses zu
warten, die durch den Aufruf von open_socket_connect
eingeleitet
wird. Dies ermöglicht es mehreren Prozessen mit dem Prozess, der
open_socket_accept
aufruft, eine Verbindung herzustellen. Um eine
ankommende 'HALCON' oder 'TCP' Verbindungsanfrage zu
akzeptieren, muss socket_accept_connect
aufgerufen werden, so dass
ein Socket für die eigentliche Kommunikation zur Verfügung steht.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Port
(input_control) number →
(integer)
Nummer des Ports.
Defaultwert: 3000
Wertevorschläge: 3000, 4570
Typischer Wertebereich: 1024
≤
Port
≤
65535
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
GenParamName
(input_control) attribute.name(-array) →
(string)
Namen der generischen Parameter, die für die Socket-Verbindung eingestellt werden sollen.
Defaultwert: []
Werteliste: 'address' , 'protocol' , 'string_encoding' , 'timeout'
GenParamValue
(input_control) attribute.value(-array) →
(string / real / integer)
Werte der generischen Parameter, die für die Socket-Verbindung eingestellt werden sollen.
Defaultwert: []
Wertevorschläge: 0, 3.0, 'infinite' , 'HALCON' , 'UDP' , 'TCP' , 'HALCON4' , 'UDP4' , 'TCP4' , 'HALCON6' , 'UDP6' , 'TCP6' , 'utf8' , 'locale' , 'ignore'
AcceptingSocket
(output_control) socket →
(handle)
Nummer des Sockets.
* Process 1 dev_set_colored (12) open_socket_accept (3000, [], [], AcceptingSocket) * Busy wait for an incoming connection dev_error_var (Error, 1) dev_set_check ('~give_error') OpenStatus := 5 while (OpenStatus != 2) socket_accept_connect (AcceptingSocket, 'false', Socket) OpenStatus := Error wait_seconds (0.2) endwhile dev_set_check ('give_error') * Connection established receive_image (Image, Socket) threshold (Image, Region, 0, 63) send_region (Region, Socket) receive_region (ConnectedRegions, Socket) area_center (ConnectedRegions, Area, Row, Column) send_tuple (Socket, Area) send_tuple (Socket, Row) send_tuple (Socket, Column) close_socket (Socket) close_socket (AcceptingSocket) * Process 2 dev_set_colored (12) open_socket_connect ('localhost', 3000, [], [], Socket) read_image (Image, 'fabrik') send_image (Image, Socket) receive_region (Region, Socket) connection (Region, ConnectedRegions) send_region (ConnectedRegions, Socket) receive_tuple (Socket, Area) receive_tuple (Socket, Row) receive_tuple (Socket, Column) close_socket (Socket)
open_socket_connect
,
close_socket
,
get_socket_param
,
set_socket_param
,
send_image
,
receive_image
,
send_region
,
receive_region
,
send_tuple
,
receive_tuple
,
send_data
,
receive_data
Foundation