class_packetpeerudp.rst 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/PacketPeerUDP.xml.
  6. .. _class_PacketPeerUDP:
  7. PacketPeerUDP
  8. =============
  9. **Inherits:** :ref:`PacketPeer<class_PacketPeer>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
  10. UDP packet peer.
  11. .. rst-class:: classref-introduction-group
  12. Description
  13. -----------
  14. UDP packet peer. Can be used to send and receive raw UDP packets as well as :ref:`Variant<class_Variant>`\ s.
  15. \ **Example:** Send a packet:
  16. ::
  17. var peer = PacketPeerUDP.new()
  18. # Optionally, you can select the local port used to send the packet.
  19. peer.bind(4444)
  20. peer.set_dest_address("1.1.1.1", 4433)
  21. peer.put_packet("hello".to_utf8_buffer())
  22. \ **Example:** Listen for packets:
  23. ::
  24. var peer
  25. func _ready():
  26. peer = PacketPeerUDP.new()
  27. peer.bind(4433)
  28. func _process(_delta):
  29. if peer.get_available_packet_count() > 0:
  30. var array_bytes = peer.get_packet()
  31. var packet_string = array_bytes.get_string_from_ascii()
  32. print("Received message: ", packet_string)
  33. \ **Note:** When exporting to Android, make sure to enable the ``INTERNET`` permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
  34. .. rst-class:: classref-reftable-group
  35. Methods
  36. -------
  37. .. table::
  38. :widths: auto
  39. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  40. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`bind<class_PacketPeerUDP_method_bind>`\ (\ port\: :ref:`int<class_int>`, bind_address\: :ref:`String<class_String>` = "*", recv_buf_size\: :ref:`int<class_int>` = 65536\ ) |
  41. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  42. | |void| | :ref:`close<class_PacketPeerUDP_method_close>`\ (\ ) |
  43. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  44. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`connect_to_host<class_PacketPeerUDP_method_connect_to_host>`\ (\ host\: :ref:`String<class_String>`, port\: :ref:`int<class_int>`\ ) |
  45. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  46. | :ref:`int<class_int>` | :ref:`get_local_port<class_PacketPeerUDP_method_get_local_port>`\ (\ ) |const| |
  47. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  48. | :ref:`String<class_String>` | :ref:`get_packet_ip<class_PacketPeerUDP_method_get_packet_ip>`\ (\ ) |const| |
  49. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  50. | :ref:`int<class_int>` | :ref:`get_packet_port<class_PacketPeerUDP_method_get_packet_port>`\ (\ ) |const| |
  51. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  52. | :ref:`bool<class_bool>` | :ref:`is_bound<class_PacketPeerUDP_method_is_bound>`\ (\ ) |const| |
  53. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  54. | :ref:`bool<class_bool>` | :ref:`is_socket_connected<class_PacketPeerUDP_method_is_socket_connected>`\ (\ ) |const| |
  55. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  56. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`join_multicast_group<class_PacketPeerUDP_method_join_multicast_group>`\ (\ multicast_address\: :ref:`String<class_String>`, interface_name\: :ref:`String<class_String>`\ ) |
  57. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  58. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`leave_multicast_group<class_PacketPeerUDP_method_leave_multicast_group>`\ (\ multicast_address\: :ref:`String<class_String>`, interface_name\: :ref:`String<class_String>`\ ) |
  59. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  60. | |void| | :ref:`set_broadcast_enabled<class_PacketPeerUDP_method_set_broadcast_enabled>`\ (\ enabled\: :ref:`bool<class_bool>`\ ) |
  61. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  62. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`set_dest_address<class_PacketPeerUDP_method_set_dest_address>`\ (\ host\: :ref:`String<class_String>`, port\: :ref:`int<class_int>`\ ) |
  63. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  64. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`wait<class_PacketPeerUDP_method_wait>`\ (\ ) |
  65. +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  66. .. rst-class:: classref-section-separator
  67. ----
  68. .. rst-class:: classref-descriptions-group
  69. Method Descriptions
  70. -------------------
  71. .. _class_PacketPeerUDP_method_bind:
  72. .. rst-class:: classref-method
  73. :ref:`Error<enum_@GlobalScope_Error>` **bind**\ (\ port\: :ref:`int<class_int>`, bind_address\: :ref:`String<class_String>` = "*", recv_buf_size\: :ref:`int<class_int>` = 65536\ ) :ref:`🔗<class_PacketPeerUDP_method_bind>`
  74. Binds this **PacketPeerUDP** to the specified ``port`` and ``bind_address`` with a buffer size ``recv_buf_size``, allowing it to receive incoming packets.
  75. If ``bind_address`` is set to ``"*"`` (default), the peer will be bound on all available addresses (both IPv4 and IPv6).
  76. If ``bind_address`` is set to ``"0.0.0.0"`` (for IPv4) or ``"::"`` (for IPv6), the peer will be bound to all available addresses matching that IP type.
  77. If ``bind_address`` is set to any valid address (e.g. ``"192.168.1.101"``, ``"::1"``, etc.), the peer will only be bound to the interface with that address (or fail if no interface with the given address exists).
  78. .. rst-class:: classref-item-separator
  79. ----
  80. .. _class_PacketPeerUDP_method_close:
  81. .. rst-class:: classref-method
  82. |void| **close**\ (\ ) :ref:`🔗<class_PacketPeerUDP_method_close>`
  83. Closes the **PacketPeerUDP**'s underlying UDP socket.
  84. .. rst-class:: classref-item-separator
  85. ----
  86. .. _class_PacketPeerUDP_method_connect_to_host:
  87. .. rst-class:: classref-method
  88. :ref:`Error<enum_@GlobalScope_Error>` **connect_to_host**\ (\ host\: :ref:`String<class_String>`, port\: :ref:`int<class_int>`\ ) :ref:`🔗<class_PacketPeerUDP_method_connect_to_host>`
  89. Calling this method connects this UDP peer to the given ``host``/``port`` pair. UDP is in reality connectionless, so this option only means that incoming packets from different addresses are automatically discarded, and that outgoing packets are always sent to the connected address (future calls to :ref:`set_dest_address<class_PacketPeerUDP_method_set_dest_address>` are not allowed). This method does not send any data to the remote peer, to do that, use :ref:`PacketPeer.put_var<class_PacketPeer_method_put_var>` or :ref:`PacketPeer.put_packet<class_PacketPeer_method_put_packet>` as usual. See also :ref:`UDPServer<class_UDPServer>`.
  90. \ **Note:** Connecting to the remote peer does not help to protect from malicious attacks like IP spoofing, etc. Think about using an encryption technique like TLS or DTLS if you feel like your application is transferring sensitive information.
  91. .. rst-class:: classref-item-separator
  92. ----
  93. .. _class_PacketPeerUDP_method_get_local_port:
  94. .. rst-class:: classref-method
  95. :ref:`int<class_int>` **get_local_port**\ (\ ) |const| :ref:`🔗<class_PacketPeerUDP_method_get_local_port>`
  96. Returns the local port to which this peer is bound.
  97. .. rst-class:: classref-item-separator
  98. ----
  99. .. _class_PacketPeerUDP_method_get_packet_ip:
  100. .. rst-class:: classref-method
  101. :ref:`String<class_String>` **get_packet_ip**\ (\ ) |const| :ref:`🔗<class_PacketPeerUDP_method_get_packet_ip>`
  102. Returns the IP of the remote peer that sent the last packet(that was received with :ref:`PacketPeer.get_packet<class_PacketPeer_method_get_packet>` or :ref:`PacketPeer.get_var<class_PacketPeer_method_get_var>`).
  103. .. rst-class:: classref-item-separator
  104. ----
  105. .. _class_PacketPeerUDP_method_get_packet_port:
  106. .. rst-class:: classref-method
  107. :ref:`int<class_int>` **get_packet_port**\ (\ ) |const| :ref:`🔗<class_PacketPeerUDP_method_get_packet_port>`
  108. Returns the port of the remote peer that sent the last packet(that was received with :ref:`PacketPeer.get_packet<class_PacketPeer_method_get_packet>` or :ref:`PacketPeer.get_var<class_PacketPeer_method_get_var>`).
  109. .. rst-class:: classref-item-separator
  110. ----
  111. .. _class_PacketPeerUDP_method_is_bound:
  112. .. rst-class:: classref-method
  113. :ref:`bool<class_bool>` **is_bound**\ (\ ) |const| :ref:`🔗<class_PacketPeerUDP_method_is_bound>`
  114. Returns whether this **PacketPeerUDP** is bound to an address and can receive packets.
  115. .. rst-class:: classref-item-separator
  116. ----
  117. .. _class_PacketPeerUDP_method_is_socket_connected:
  118. .. rst-class:: classref-method
  119. :ref:`bool<class_bool>` **is_socket_connected**\ (\ ) |const| :ref:`🔗<class_PacketPeerUDP_method_is_socket_connected>`
  120. Returns ``true`` if the UDP socket is open and has been connected to a remote address. See :ref:`connect_to_host<class_PacketPeerUDP_method_connect_to_host>`.
  121. .. rst-class:: classref-item-separator
  122. ----
  123. .. _class_PacketPeerUDP_method_join_multicast_group:
  124. .. rst-class:: classref-method
  125. :ref:`Error<enum_@GlobalScope_Error>` **join_multicast_group**\ (\ multicast_address\: :ref:`String<class_String>`, interface_name\: :ref:`String<class_String>`\ ) :ref:`🔗<class_PacketPeerUDP_method_join_multicast_group>`
  126. Joins the multicast group specified by ``multicast_address`` using the interface identified by ``interface_name``.
  127. You can join the same multicast group with multiple interfaces. Use :ref:`IP.get_local_interfaces<class_IP_method_get_local_interfaces>` to know which are available.
  128. \ **Note:** Some Android devices might require the ``CHANGE_WIFI_MULTICAST_STATE`` permission for multicast to work.
  129. .. rst-class:: classref-item-separator
  130. ----
  131. .. _class_PacketPeerUDP_method_leave_multicast_group:
  132. .. rst-class:: classref-method
  133. :ref:`Error<enum_@GlobalScope_Error>` **leave_multicast_group**\ (\ multicast_address\: :ref:`String<class_String>`, interface_name\: :ref:`String<class_String>`\ ) :ref:`🔗<class_PacketPeerUDP_method_leave_multicast_group>`
  134. Removes the interface identified by ``interface_name`` from the multicast group specified by ``multicast_address``.
  135. .. rst-class:: classref-item-separator
  136. ----
  137. .. _class_PacketPeerUDP_method_set_broadcast_enabled:
  138. .. rst-class:: classref-method
  139. |void| **set_broadcast_enabled**\ (\ enabled\: :ref:`bool<class_bool>`\ ) :ref:`🔗<class_PacketPeerUDP_method_set_broadcast_enabled>`
  140. Enable or disable sending of broadcast packets (e.g. ``set_dest_address("255.255.255.255", 4343)``. This option is disabled by default.
  141. \ **Note:** Some Android devices might require the ``CHANGE_WIFI_MULTICAST_STATE`` permission and this option to be enabled to receive broadcast packets too.
  142. .. rst-class:: classref-item-separator
  143. ----
  144. .. _class_PacketPeerUDP_method_set_dest_address:
  145. .. rst-class:: classref-method
  146. :ref:`Error<enum_@GlobalScope_Error>` **set_dest_address**\ (\ host\: :ref:`String<class_String>`, port\: :ref:`int<class_int>`\ ) :ref:`🔗<class_PacketPeerUDP_method_set_dest_address>`
  147. Sets the destination address and port for sending packets and variables. A hostname will be resolved using DNS if needed.
  148. \ **Note:** :ref:`set_broadcast_enabled<class_PacketPeerUDP_method_set_broadcast_enabled>` must be enabled before sending packets to a broadcast address (e.g. ``255.255.255.255``).
  149. .. rst-class:: classref-item-separator
  150. ----
  151. .. _class_PacketPeerUDP_method_wait:
  152. .. rst-class:: classref-method
  153. :ref:`Error<enum_@GlobalScope_Error>` **wait**\ (\ ) :ref:`🔗<class_PacketPeerUDP_method_wait>`
  154. Waits for a packet to arrive on the bound address. See :ref:`bind<class_PacketPeerUDP_method_bind>`.
  155. \ **Note:** :ref:`wait<class_PacketPeerUDP_method_wait>` can't be interrupted once it has been called. This can be worked around by allowing the other party to send a specific "death pill" packet like this:
  156. .. tabs::
  157. .. code-tab:: gdscript
  158. socket = PacketPeerUDP.new()
  159. # Server
  160. socket.set_dest_address("127.0.0.1", 789)
  161. socket.put_packet("Time to stop".to_ascii_buffer())
  162. # Client
  163. while socket.wait() == OK:
  164. var data = socket.get_packet().get_string_from_ascii()
  165. if data == "Time to stop":
  166. return
  167. .. code-tab:: csharp
  168. var socket = new PacketPeerUdp();
  169. // Server
  170. socket.SetDestAddress("127.0.0.1", 789);
  171. socket.PutPacket("Time to stop".ToAsciiBuffer());
  172. // Client
  173. while (socket.Wait() == OK)
  174. {
  175. string data = socket.GetPacket().GetStringFromASCII();
  176. if (data == "Time to stop")
  177. {
  178. return;
  179. }
  180. }
  181. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  182. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  183. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  184. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  185. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  186. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
  187. .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`
  188. .. |void| replace:: :abbr:`void (No return value.)`