PacketPeerUDP

继承: PacketPeer < RefCounted < Object

UDP数据包对等方。

描述

UDP数据包对等体。可用于发送和接收原始UDP数据包以及Variant

示例:发送一个数据包:

var peer = PacketPeerUDP.new()

# 您也可以选择用于发送数据包的本地端口。

peer.bind(4444)

peer.set_dest_address("1.1.1.1", 4433)

peer.put_packet("hello".to_utf8_buffer())

示例:监听数据包:

var peer

func _ready():
    peer = PacketPeerUDP.new()
    peer.bind(4433)


func _process(_delta):
    if peer.get_available_packet_count() > 0:
        var array_bytes = peer.get_packet()
        var packet_string = array_bytes.get_string_from_ascii()
        print("Received message: ", packet_string)

注意:在导出到Android时,请确保在导出项目或使用一键部署之前,在Android导出预设中启用INTERNET权限。否则,任何类型的网络通信都将被Android阻止。

方法

Error

bind(port: int, bind_address: String = "*", recv_buf_size: int = 65536)

void

close()

Error

connect_to_host(host: String, port: int)

int

get_local_port() const

String

get_packet_ip() const

int

get_packet_port() const

bool

is_bound() const

bool

is_socket_connected() const

Error

join_multicast_group(multicast_address: String, interface_name: String)

Error

leave_multicast_group(multicast_address: String, interface_name: String)

void

set_broadcast_enabled(enabled: bool)

Error

set_dest_address(host: String, port: int)

Error

wait()


方法说明

Error bind(port: int, bind_address: String = "*", recv_buf_size: int = 65536) 🔗

将此PacketPeerUDP绑定到指定的portbind_address,并带有缓冲区大小recv_buf_size,允许它接收传入的数据包。

如果bind_address设置为"*"(默认),则对等方将绑定所有可用地址(IPv4和IPv6)。

如果bind_address设置为"0.0.0.0"(对于IPv4)或"::"(对于IPv6),则对等方将绑定到与该IP类型匹配的所有可用地址。

如果bind_address设置为任何有效地址(例如"192.168.1.101"":: 1"等),则对等方将仅绑定到具有该地址的接口(如果不存在具有给定地址的接口,则失败)。


void close() 🔗

关闭PacketPeerUDP的底层UDP套接字。


Error connect_to_host(host: String, port: int) 🔗

调用此方法将此UDP对等点连接到给定的host/port对。UDP实际上是无连接的,因此此选项仅意味着来自不同地址的传入数据包会自动丢弃,并且传出数据包始终发送到连接的地址(不允许将来调用set_dest_address())。此方法不会向远程对等点发送任何数据,为此,请像往常一样使用PacketPeer.put_var()PacketPeer.put_packet()。另请参见UDPServer

注意:连接到远程对等点无助于防止IP欺骗等恶意攻击。如果您觉得您的应用程序正在传输敏感信息,请考虑使用TLS或DTLS等加密技术。


int get_local_port() const 🔗

返回此对等点绑定到的本地端口。


String get_packet_ip() const 🔗

返回发送最后一个数据包(使用PacketPeer.get_packet()PacketPeer.get_var()接收的)的远程对等方的IP。


int get_packet_port() const 🔗

返回发送最后一个数据包(使用PacketPeer.get_packet()PacketPeer.get_var()接收的)的远程对等方的端口。


bool is_bound() const 🔗

返回此PacketPeerUDP是否绑定到地址并可以接收数据包。


bool is_socket_connected() const 🔗

如果UDP套接字已打开并且已连接到远程地址,则返回true。请参阅connect_to_host()


Error join_multicast_group(multicast_address: String, interface_name: String) 🔗

使用multicast_address标识的接口加入multicast_address指定的多播组。

您可以使用多个接口加入同一个多播组。使用IP.get_local_interfaces()了解哪些可用。

注意:某些Android设备可能需要CHANGE_WIFI_MULTICAST_STATE权限才能进行多播。


Error leave_multicast_group(multicast_address: String, interface_name: String) 🔗

interface_name指定的多播组中删除interface_name标识的接口。


void set_broadcast_enabled(enabled: bool) 🔗

启用或禁用广播数据包的发送(例如set_dest_address("255.255.255.255",4343)。默认情况下禁用此选项。

注意:某些Android设备可能需要CHANGE_WIFI_MULTICAST_STATE权限,并且要启用此选项才能接收广播数据包。


Error set_dest_address(host: String, port: int) 🔗

设置用于发送数据包和变量的目标地址和端口。如果需要,将使用DNS解析主机名。

注意:set_broadcast_enabled()必须在向播放地址发送数据包之前启用(例如255.255.255.255)。


Error wait() 🔗

等待绑定地址上的数据包到达。请参阅bind()

注意: wait()一旦被调用就无法中断。可以通过让另一方发送特定的"death pill"数据包来解决这个问题:

socket = PacketPeerUDP.new()

socket.set_dest_address("127.0.0.1", 789)
socket.put_packet("Time to stop".to_ascii_buffer())


while socket.wait() == OK:
    var data = socket.get_packet().get_string_from_ascii()
    if data == "Time to stop":
        return