DTLSServer

Inherits: Reference < Object

实现DTLS服务器的辅助类。

描述

这个类用来存储DTLS服务器的状态。在setup时,它将连接的PacketPeerUDP转换为PacketPeerDTLS,通过take_connection接受它们作为DTLS客户端。底下,这个类是用来存储服务器的DTLS状态和cookie的。为什么需要状态和cookie的原因不在本文档的范围内。

下面以一个小例子来说明如何使用它。

  1. # server.gd
  2. extends Node
  3. var dtls := DTLSServer.new()
  4. var server := UDPServer.new()
  5. var peers = []
  6. func _ready():
  7. server.listen(4242)
  8. var key = load("key.key") # Your private key.
  9. var cert = load("cert.crt") # Your X509 certificate.
  10. dtls.setup(key, cert)
  11. func _process(delta):
  12. while server.is_connection_available():
  13. var peer : PacketPeerUDP = server.take_connection()
  14. var dtls_peer : PacketPeerDTLS = dtls.take_connection(peer)
  15. if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:
  16. continue # It is normal that 50% of the connections fails due to cookie exchange.
  17. print("Peer connected!")
  18. peers.append(dtls_peer)
  19. for p in peers:
  20. p.poll() # Must poll to update the state.
  21. if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
  22. while p.get_available_packet_count() > 0:
  23. print("Received message from client: %s" % p.get_packet().get_string_from_utf8())
  24. p.put_packet("Hello DTLS client".to_utf8())
  1. # client.gd
  2. extends Node
  3. var dtls := PacketPeerDTLS.new()
  4. var udp := PacketPeerUDP.new()
  5. var connected = false
  6. func _ready():
  7. udp.connect_to_host("127.0.0.1", 4242)
  8. dtls.connect_to_peer(udp, false) # Use true in production for certificate validation!
  9. func _process(delta):
  10. dtls.poll()
  11. if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
  12. if !connected:
  13. # Try to contact server
  14. dtls.put_packet("The answer is... 42!".to_utf8())
  15. while dtls.get_available_packet_count() > 0:
  16. print("Connected: %s" % dtls.get_packet().get_string_from_utf8())
  17. connected = true

方法

Error

setup ( CryptoKey key, X509Certificate certificate, X509Certificate chain=null )

PacketPeerDTLS

take_connection ( PacketPeerUDP udp_peer )

方法说明

设置 DTLS 服务器使用给定的 private_key 并向客户端提供给定的 certificate 。您可以传递可选的 chain 参数,以便在提供证书的同时提供额外的 CA 证书息。


尝试与给定的udp_peer启动DTLS握手,该peer必须已经连接,参阅PacketPeerUDP.connect_to_host

注意: 你必须检查返回PacketPeerUDP的状态是否为PacketPeerDTLS.STATUS_HANDSHAKING,因为正常情况下,50%的新连接会因为cookie交换而无效。