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.

UDPServer

继承: RefCounted < Object

用于实现 UDP 服务器的辅助类。

描述

简易服务器,会打开 UDP 套接字,并在收到新数据包时返回已连接的 PacketPeerUDP。另见 PacketPeerUDP.connect_to_host

服务器启动后(listen),你需要调用 poll 按照一定的间隔轮询(例如在 Node._process 中)才能处理新数据包、将它们传递给合适的 PacketPeerUDP、获取新连接。

下面是简单的用法示例:

# server_node.gd
class_name ServerNode
extends Node

var server := UDPServer.new()
var peers = []

func _ready():
    server.listen(4242)

func _process(delta):
    server.poll() # 重要!
    if server.is_connection_available():
        var peer: PacketPeerUDP = server.take_connection()
        var packet = peer.get_packet()
        print("接受对等体:%s:%s" % [peer.get_packet_ip(), peer.get_packet_port()])
        print("接收到数据:%s" % [packet.get_string_from_utf8()])
        # 进行回复,这样对方就知道我们收到了消息。
        peer.put_packet(packet)
        # 保持引用,这样我们就能继续与远程对等体联系。
        peers.append(peer)

    for i in range(0, peers.size()):
        pass # 针对已连接的对等体进行操作。
# client_node.gd
class_name ClientNode
extends Node

var udp := PacketPeerUDP.new()
var connected = false

func _ready():
    udp.connect_to_host("127.0.0.1", 4242)

func _process(delta):
    if !connected:
        # 尝试连接服务器
        udp.put_packet("答案是……42!".to_utf8_buffer())
    if udp.get_available_packet_count() > 0:
        print("已连接:%s" % udp.get_packet().get_string_from_utf8())
        connected = true

属性

int

max_pending_connections

16

方法

int

get_local_port() const

bool

is_connection_available() const

bool

is_listening() const

Error

listen(port: int, bind_address: String = "*")

Error

poll()

void

stop()

PacketPeerUDP

take_connection()


属性说明

int max_pending_connections = 16 🔗

  • void set_max_pending_connections(value: int)

  • int get_max_pending_connections()

定义最大的待定连接数,在poll期间,任何超过该值的新待定连接将被自动放弃。把这个值设置为0可以有效地防止任何新的待定连接被接受,例如,当你的所有玩家都连接时。


方法说明

int get_local_port() const 🔗

返回该服务器正在监听的本地端口。


bool is_connection_available() const 🔗

如果在套接字中收到一个具有新地址及端口组合的数据包,则返回 true


bool is_listening() const 🔗

如果套接字是打开的,并且在监听端口,则返回 true


Error listen(port: int, bind_address: String = "*") 🔗

启动服务器,打开监听给定端口 port 的 UDP 套接字。还可以指定 bind_address,仅监听发送至该地址的数据包。另见 PacketPeerUDP.bind


Error poll() 🔗

定期调用这个方法,例如在Node._process里面,来处理新数据包。来自已知地址及端口对的数据包,将被传递到相应的PacketPeerUDP,任何从未知地址及端口对收到的数据包将被添加为一个待定连接,参阅is_connection_available, take_connection。待定连接的最大数量通过max_pending_connections定义。


void stop() 🔗

停止服务器,如果 UDP 套接字处于打开状态,就关闭它。将关闭所有通过 take_connection 接受连接的 PacketPeerUDP(不会通知远程对等体)。


PacketPeerUDP take_connection() 🔗

返回第一个挂起的连接(连接到适当的地址及端口)。如果没有新的连接可用,将返回 null。另请参阅 is_connection_availablePacketPeerUDP.connect_to_host