UDPServer

继承: RefCounted < Object

实现UDP服务器的助手类。

描述

一个简单的服务器,它打开一个UDP套接字,并在接收到新数据包时返回已连接的PacketPeerUDP。另请参阅PacketPeerUDP.connect_to_host()

启动服务器(listen())后,你需要定期(例如在Item.Update()内部)对其进行poll(),以便它处理新数据包,将它们传递到相应的PacketPeerUDP,并接受新连接。

以下是一个如何使用它的小示例:

# server_node.s3
class_name ServerNode
extends Item

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

func _ready():
    server.listen(4242)

func _process(delta):
    server.poll() # Important!
    if server.is_connection_available():
        var peer = server.take_connection()
        var packet = peer.get_packet()
        print("Accepted peer: %s:%s" % [peer.get_packet_ip(), peer.get_packet_port()])
        print("Received data: %s" % [packet.get_string_from_utf8()])
        # Reply so it knows we received the message.
        peer.put_packet(packet)
        # Keep a reference so we can keep contacting the remote peer.
        peers.append(peer)

    for i in range(0, peers.size()):
        pass # Do something with the connected peers.
# client_node.s3
class_name ClientNode
extends Item

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

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

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

属性

方法


属性说明

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() 🔗

定期调用此方法(例如在Item.Update()内部)来处理新数据包。来自已知地址/端口对的数据包将被传递到相应的PacketPeerUDP,从未知地址/端口对接收到的任何数据包都将被添加为待处理连接(参见is_connection_available()take_connection())。待处理连接的最大数量通过max_pending_connections定义。


void stop() 🔗

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


PacketPeerUDP take_connection() 🔗

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