UDPServer
用于实现UDP服务的辅助类。
描述
一个简单的服务器,它打开一个 UDP 套接字,并在收到新的数据包时,返回连接的 PacketPeerUDP。请参阅 PacketPeerUDP.connect_to_host。
启动服务器后(listen),你将需要定期 poll 它(例如在 Node._process 内),才会处理新的数据包、将它们传递给适当的 PacketPeerUDP、接受新连接。
下面是一个关于如何使用它的小例子。
# server.gd
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 pkt = peer.get_packet()
print("接受到 peer:%s:%s" % [peer.get_packet_ip(), peer.get_packet_port()])
print("收到数据:%s" % [pkt.get_string_from_utf8()])
# 发出回复,这样对方就能知道我们收到了消息。
peer.put_packet(pkt)
# 保持引用,这样就可以不断与远程 peer 联系。
peers.append(peer)
for i in range(0, peers.size()):
pass # 与已连接的 peer 进行交互
# client.gd
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())
if udp.get_available_packet_count() > 0:
print("已连接:%s" % udp.get_packet().get_string_from_utf8())
connected = true
属性
|
方法
is_connection_available ( ) const | |
is_listening ( ) const | |
poll ( ) | |
void | stop ( ) |
take_connection ( ) |
属性说明
- int max_pending_connections
Default |
|
Setter | set_max_pending_connections(value) |
Getter | get_max_pending_connections() |
定义最大的待定连接数,在poll期间,任何超过该值的新待定连接将被自动放弃。把这个值设置为0
可以有效地防止任何新的待定连接被接受,例如,当你的所有玩家都连接时。
方法说明
- bool is_connection_available ( ) const
如果在套接字中收到一个具有新地址及端口组合的数据包,则返回true
。
- bool is_listening ( ) const
如果套接字是打开的,并且在监听端口,则返回true
。
通过在给定的端口上打开一个UDP套接字来启动服务。你可以选择指定一个bind_address
,只监听发送到该地址的数据包。参阅PacketPeerUDP.listen。
- 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_available, PacketPeerUDP.connect_to_host。