UDPServer

Inherits: Reference < Object

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

描述

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

启动服务器后(listen),你将需要定期 poll 它(例如在 Node._process 内),才会处理新的数据包、将它们传递给适当的 PacketPeerUDP、接受新连接。

下面是一个关于如何使用它的小例子。

  1. # server.gd
  2. extends Node
  3. var server := UDPServer.new()
  4. var peers = []
  5. func _ready():
  6. server.listen(4242)
  7. func _process(delta):
  8. server.poll() # 重要!
  9. if server.is_connection_available():
  10. var peer : PacketPeerUDP = server.take_connection()
  11. var pkt = peer.get_packet()
  12. print("接受到 peer:%s:%s" % [peer.get_packet_ip(), peer.get_packet_port()])
  13. print("收到数据:%s" % [pkt.get_string_from_utf8()])
  14. # 发出回复,这样对方就能知道我们收到了消息。
  15. peer.put_packet(pkt)
  16. # 保持引用,这样就可以不断与远程 peer 联系。
  17. peers.append(peer)
  18. for i in range(0, peers.size()):
  19. pass # 与已连接的 peer 进行交互
  1. # client.gd
  2. extends Node
  3. var udp := PacketPeerUDP.new()
  4. var connected = false
  5. func _ready():
  6. udp.connect_to_host("127.0.0.1", 4242)
  7. func _process(delta):
  8. if !connected:
  9. # 尝试联系服务器
  10. udp.put_packet("答案是……42!".to_utf8())
  11. if udp.get_available_packet_count() > 0:
  12. print("已连接:%s" % udp.get_packet().get_string_from_utf8())
  13. connected = true

属性

int

max_pending_connections

16

方法

bool

is_connection_available ( ) const

bool

is_listening ( ) const

Error

listen ( int port, String bind_address=”*” )

Error

poll ( )

void

stop ( )

PacketPeerUDP

take_connection ( )

属性说明

  • int max_pending_connections

Default

16

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


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


  • void stop ( )

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


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