I used TCP at first, but it was too slow. And I decided to try UDP. I took the code from this article as a basis. When I started it only on my computer, everything worked. But when it was done on different computers connected by a local network it didn't work. Although TCP worked. This gives me a port error. Honestly, I don't know what to do. Maybe I didn't search well. I will be grateful if you point out my mistake.
I think it's right to leave the code here.
Here I can choose which mode the program should run in (Server/client):
extends Node2D
func _ready():
$c.show()
$s.show()
$c.connect("pressed", self, "client_press")
$s.connect("pressed", self, "server_press")
$client/apply.connect("pressed", self, "client")
$server/apply.connect("pressed", self, "server")
func server():
G.PORT_SERVER = int($server/h_port.text)
get_tree().change_scene("res://server.tscn")
func client():
G.IP_SERVER = str($client/ip.text)
G.PORT_CLIENT = int($client/c_port.text)
G.PORT_SERVER = int($client/h_port.text)
get_tree().change_scene("res://client.tscn")
func server_press():
$c.disabled = true
$s.hide()
func client_press():
$s.disabled = true
$c.hide()

This is a code of client:
extends Node
var IP_SERVER = G.IP_SERVER
var PORT_SERVER = G.PORT_SERVER
var PORT_CLIENT = G.PORT_CLIENT
var socketUDP = PacketPeerUDP.new()
var cron_send = 1
func _ready():
start_client()
func _process(delta):
if cron_send > 0:
cron_send -= delta
if cron_send <= 0:
if socketUDP.is_listening():
socketUDP.set_dest_address(IP_SERVER, PORT_SERVER)
var stg = "hi server!"
var pac = stg.to_ascii()
socketUDP.put_packet(pac)
print("send!")
cron_send = 3
if socketUDP.get_available_packet_count() > 0:
var array_bytes = socketUDP.get_packet()
printt("msg server: " + array_bytes.get_string_from_ascii())
func start_client():
if (socketUDP.listen(PORT_CLIENT, IP_SERVER) != OK):
printt("Error listening on port: " + str(PORT_CLIENT) + " in server: " + IP_SERVER)
else:
printt("Listening on port: " + str(PORT_CLIENT) + " in server: " + IP_SERVER)
func _exit_tree():
socketUDP.close()
And code of server:
extends Node
var IP_CLIENT
var PORT_CLIENT
var PORT_SERVER = G.PORT_SERVER
var socketUDP = PacketPeerUDP.new()
func _ready():
start_server()
func _process(delta):
if socketUDP.get_available_packet_count() > 0:
var array_bytes = socketUDP.get_packet()
var IP_CLIENT = socketUDP.get_packet_ip()
var PORT_CLIENT = socketUDP.get_packet_port()
printt("msg server: " + array_bytes.get_string_from_ascii())
socketUDP.set_dest_address(IP_CLIENT, PORT_CLIENT)
var stg = "hi server!"
var pac = stg.to_ascii()
socketUDP.put_packet(pac)
func start_server():
if (socketUDP.listen(PORT_SERVER) != OK):
printt("Error listening on port: " + str(PORT_SERVER))
else:
printt("Listening on port: " + str(PORT_SERVER))
func _exit_tree():
socketUDP.close()
Maybe it important but global script looks it:
(In here i send params to use it in server or client)
var IP_SERVER = "127.0.0.1"
var PORT_SERVER = 1507
var PORT_CLIENT = 1509