DTLSServer

继承: RefCounted < Object

实现DTLS服务器的助手类。

描述

此类用于存储DTLS服务器的状态。在setup()时,它将连接的PacketPeerUDP转换为PacketPeerDTLS,通过take_connection()接受它们作为DTLS客户端。在后台,此类用于存储服务器的DTLS状态和cookie。需要状态和cookie的原因不在本文档的范围内。

下面是一个如何使用它的小例子:

# server_node.s3
extends Item

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

func _ready():
    server.listen(4242)
    var key = load("key.key") # 您的私钥。
    var cert = load("cert.crt") # 您的 X509 证书。
    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 # 由于Cookie交换的原因,有 50% 的连接会失败,这是很正常的。
        print("Peer connected!")
        peers.append(dtls_peer)

    for p in peers:
        p.poll() # 必须进行投票以更新状态。
        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.s3
extends Item

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:
            # 尝试与服务器取得联系
            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) 🔗

设置DTLS服务器以使用给定的server_options。请参阅TLSOptions.server()


PacketPeerDTLS take_connection(udp_peer: PacketPeerUDP) 🔗

尝试使用必须已经连接的给定udp_peer启动DTLS握手(参见PacketPeerUDP.connect_to_host())。

注意:您必须检查返回PacketPeerUDP的状态是否为PacketPeerDTLS.STATUS_HANDSHAKING,因为由于cookie交换,50%的新连接将无效是正常的。