Problem connecting to the NTRIP server

Godot Version 4.4

Hello team.
I’m trying to connect to an NTRIP server, Centipede’s https://docs.centipede.fr/, to get a fix for a GNSS.

My problem is that I’m not good at all when it comes to networks. Here’s my code:

extends Panel
#signal pressed()


@onready var Panel_Gnss : Panel=%Gnss
@onready var OptionButton_Serial_Gnss : OptionButton = %OptionButton_Serial_Gnss
@onready var check_button : CheckButton = %CheckButton_Serial_Port
@onready var TextEdit_Ntrip_Caster : LineEdit = %TextEdit_Ntrip_Caster
@onready var TextEdit_Port_Caster : LineEdit = %TextEdit_Port_Caster

#@export var adresse_ip: String = "147.100.179.214"
@export var adresse_ip: String = "crtk.net"
@export var port: int = 2101
@export var point_de_montage: String = "LBFLT"
@export var username: String = "centipede"
@export var password: String = "centipede"

var socket: StreamPeerTCP	# Socket pour la communication TCP
var timer: Timer			# Timer pour la réception périodique des données



# Called when the node enters the scene tree for the first time.
func _ready() -> void:


	# Démarrage de la connexion 
	timer = Timer.new()
	timer.timeout.connect(_sur_timeout)
	add_child(timer)
	_initialiser_client_ntrip()




func _initialiser_client_ntrip() -> void:
	# Création du socket TCP
	socket = StreamPeerTCP.new()
	var retry_count = 0
	var max_retries = 3
	
	# Connexion au serveur NTRIP
	var erreur = socket.connect_to_host(adresse_ip, port)
	if erreur != OK:
		printerr("Erreur de connexion au serveur NTRIP : ", erreur)
		return
	
	print("Connexion au serveur NTRIP établie")
	
	# Création de l'en-tête d'authentification
	var auth = _encoder_base64("%s:%s" % [username, password])
	print("Authentification encodée : ", auth)
	
	var requete = "GET /" + point_de_montage + " HTTP/1.1\r\n"
	requete += "User-Agent: NTRIP iter.dk\r\n"
	requete += "Authorization: Basic " + auth + "\r\n"
	requete += "Accept: */*\r\n"
	requete += "Connection: close\r\n"
	requete += "\r\n"
	print("Requête NTRIP : 			", requete)
	
	# Envoi de la requête
	socket.put_string(requete)

	if socket.get_status() != StreamPeerTCP.STATUS_CONNECTED:
		printerr("Erreur d'envoi de la requête - Connexion perdue")
		var error = socket.poll()

		if StreamPeerTCP.STATUS_NONE:
			print("Le port est déjà utilisé")
		if StreamPeerTCP.STATUS_CONNECTING:
			print("En train de se connecter...")
		if StreamPeerTCP.STATUS_ERROR:
			var host = socket.get_connected_host()
			var port = socket.get_connected_port()
			print("Erreur avec le serveur %s:%d" % [host, port])
			
			# Réessayer la connexion si nécessaire
			socket.disconnect_from_host()
		return
	
	# Lecture de la réponse du serveur
	var response = ""
	var timeout = 0
	const TIMEOUT_MAX = 30  # 30 secondes
	
	while timeout < TIMEOUT_MAX:
		var result = socket.get_partial_data(1)
		if result[0] != OK:
			printerr("Erreur de lecture des données : ", result[0])
			return
		var data = result[1]
		if data.empty:
			timeout += 1
			await get_tree().create_timer(1.0).timeout
			continue
		response += data.get_string_from_utf8()
	
	# Vérification de la réponse
	if response.empty:
		printerr("Aucune réponse reçue du serveur")
		return
	
	if response.find("SOURCETABLE 200 OK") != -1:
		print("Connexion au caster établie avec succès")
	elif response.find("401 Unauthorized") != -1:
		printerr("Erreur d'authentification")
	elif response.find("404 Not Found") != -1:
		printerr("Point de montage non trouvé")
	else:
		printerr("Erreur de connexion au caster:", response)
	
	# Démarrage du timer pour la réception des données
	timer.start(0.1)  # 100ms

func _sur_timeout() -> void:
	# Lecture des données du socket
	if socket.get_available_bytes() > 0:
		var donnees = socket.get_data(socket.get_available_bytes())
		print("Données reçues : ", donnees.get_string_from_utf8())
		
		# À ce stade, vous pouvez ajouter le code pour traiter les données
		# avec votre récepteur GPS
	else:
		print("Aucune donnée disponible")
		
		
func _encoder_base64(texte: String) -> String:
	var donnees = texte.to_utf8_buffer()
	return Marshalls.raw_to_base64(donnees)

	
func _exit_tree() -> void:
	# Nettoyage à la fermeture
	if socket != null and socket.get_status() == StreamPeerTCP.STATUS_CONNECTED:
		socket.disconnect_from_host()
	socket = null
	timer.queue_free()
	print("Client NTRIP arrêté")
		
#______________FIN NTRIP_____________
#______________FIN NTRIP_____________
#______________FIN NTRIP_____________
#______________FIN NTRIP_____________
#______________FIN NTRIP_____________

Use a HTTPRequest node or a HTTPClient object instead of a raw TCP socket.

Here are some tutorials: