Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

DTLSServer

繼承: RefCounted < Object

實作 DTLS 伺服器的輔助類。

說明

This class is used to store the state of a DTLS server. Upon setup() it converts connected PacketPeerUDP to PacketPeerDTLS accepting them via take_connection() as DTLS clients. Under the hood, this class is used to store the DTLS state and cookies of the server. The reason of why the state and cookies are needed is outside of the scope of this documentation.

Below a small example of how to use it:

# server_node.gd
extends Node

var dtls = DTLSServer.new()
var server = UDPServer.new()
var peers = []

func _ready():
    server.listen(4242)
    var key = load("key.key") # Your private key.
    var cert = load("cert.crt") # Your X509 certificate.
    dtls.setup(TlsOptions.server(key, cert))

func _process(delta):
    while server.is_connection_available():
        var peer = server.take_connection()
        var dtls_peer = dtls.take_connection(peer)
        if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:
            continue # It is normal that 50% of the connections fails due to cookie exchange.
        print("Peer connected!")
        peers.append(dtls_peer)

    for p in peers:
        p.poll() # Must poll to update the state.
        if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
            while p.get_available_packet_count() > 0:
                print("Received message from client: %s" % p.get_packet().get_string_from_utf8())
                p.put_packet("Hello DTLS client".to_utf8_buffer())
# client_node.gd
extends Node

var dtls = PacketPeerDTLS.new()
var udp = PacketPeerUDP.new()
var connected = false

func _ready():
    udp.connect_to_host("127.0.0.1", 4242)
    dtls.connect_to_peer(udp, false) # Use true in production for certificate validation!

func _process(delta):
    dtls.poll()
    if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
        if !connected:
            # Try to contact server
            dtls.put_packet("The answer is... 42!".to_utf8_buffer())
        while dtls.get_available_packet_count() > 0:
            print("Connected: %s" % dtls.get_packet().get_string_from_utf8())
            connected = true

方法

Error

setup(server_options: TLSOptions)

PacketPeerDTLS

take_connection(udp_peer: PacketPeerUDP)


方法說明

Error setup(server_options: TLSOptions) 🔗

設定 DTLS 伺服器以使用給定的 server_options。請參閱 TLSOptions.server()


PacketPeerDTLS take_connection(udp_peer: PacketPeerUDP) 🔗

嘗試與給定 udp_peer 啟動 DTLS 握手,必須已連接到該 udp_peer(請參閱 PacketPeerUDP.connect_to_host())。

注意:必須檢查返回的 PacketPeerUDP 的狀態是否為 PacketPeerDTLS.STATUS_HANDSHAKING,因為正常情況下,50% 的新連接會因為 cookie 交換而無效。