«Ntrip-Version:» Заголовок в HTTP-запросе GET. Предотвращает все сообщения коррекции Ntrip, ожидающие местоположения базовой станции.
Создание программы для чтения NTRIP с сервера и передачи его через последовательный порт на GPS.
GPS время от времени распознавал передаваемые ему данные RTCM, но не мог их использовать/терял соединение. Я использовал декодер SNIP RTCM, чтобы увидеть, какие сообщения куда приходят, и обнаружил, что это только сообщение типа 1006 (местоположение базовой станции), но когда SNIP подключен к той же точке монтирования, он может найти типы 1006, 1033, 1074, 1084, 1094, 1124.
Я удалил заголовок Ntrip-version: Ntrip/2.0 из моего запроса GET, и он начал отправлять все типы сообщений, которые я ожидал (1006, 1033, 1074, 1084, 1094, 1124). когда я передаю это в GPS, он распознает данные RTCM, но все равно не хочет их использовать.
public static NetworkStream? ConnectToMountPoint(NTripClientSettings settings, NTripMountPoint mountpoint)
{
try
{
TcpClient tcp = new ();
// login details.
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{settings.Username}:{settings.Password}"));
// build up the raw HTTP request.
StringBuilder rawhttpreq = new ();
rawhttpreq.AppendLine($"GET /{mountpoint.MountPointAddress} HTTP/1.1");
rawhttpreq.AppendLine($"Host: {settings.Address}:{settings.Port}");
rawhttpreq.AppendLine("Ntrip-Version: Ntrip/2.0");
rawhttpreq.AppendLine("User-Agent: NtripClient/2.0");
rawhttpreq.AppendLine("Accept: */*");
rawhttpreq.AppendLine($"Authorization: Basic {credentials}");
rawhttpreq.AppendLine();
// request vars
byte[] requestBuffer = Encoding.ASCII.GetBytes(rawhttpreq.ToString());
//
// Try and Connect to the NTrip Mount point
//
tcp.Connect(settings.Address, settings.Port);
// if we have connected
if (tcp.Connected)
{
SystemLog.Log("Connected to mount point");
// Get the stream
NetworkStream stream = tcp.GetStream();
if(stream != null)
{
// write out request
stream.Write(requestBuffer, 0, requestBuffer.Length);
return stream;
}
}
return null;
}
catch (Exception ex)
{
if (ex is SocketException)
{
SystemLog.Log("Error connecting to ntrip server", ex, SystemLogType.Error);
}
else if (ExceptionHelper.IsKnownException(ex))
{
SystemLog.Log("Error reading from ntrip server", ex, SystemLogType.Error);
}
else
{
SystemLog.Log($"Error: {ex.Message}");
// unknown error.
throw;
}
return null;
}
}
это код, отправляющий запрос GET к точке монтирования
public static void StreamNtripDataFromMountPoint(NetworkStream? networkstream, SerialPort? ggaport, SerialPort? ntripport)
{
// response/receive vars.
byte[] responseBuffer = new byte[BUFFER_SIZE];
Task outgoingMessage;
// If NtripStream has been attached
if (networkstream != null)
{
// Read from the response stream
while (networkstream.CanRead && networkstream.CanWrite)
{
Array.Clear(responseBuffer);
Task<int> networkMessage;
int bytesread = 0;
networkMessage = networkstream.ReadAsync(responseBuffer, 0, responseBuffer.Length);
networkMessage.Wait();
bytesread = networkMessage.Result;
/// if the ntrip port is ready pass ntrip data out of it
if (ntripport != null && ntripport.IsOpen)
{
outgoingMessage = ntripport.BaseStream.WriteAsync(responseBuffer, 0, bytesread);
outgoingMessage.Wait();
}
/// if the ntrip port is closed or unattached print data to console to show that it is receiving and not sending over port
else
{
string responseString = Encoding.ASCII.GetString(responseBuffer);
SystemLog.Log($"{responseString}");
}
}
SystemLog.Log("NtripStream reset");
}
else
{
SystemLog.Log("NtripStream not found");
}
}
это код чтения данных из сетевого потока
сообщения, когда Ntrip-Version находится в заголовке сообщения, когда Ntrip-Version не является заголовком
почему это происходит? есть ли какой-то другой шаг, который мне следует предпринять для обработки входящих данных, если я скажу ему ожидать Ntrip-Version? и что делает сервер по умолчанию, если не указана Ntrip-версия? потому что я пробовал Ntrip/1.0 и Ntrip/2.0, оба они приводят к тому, что я получаю только один тип сообщения.
любое объяснение того, почему это происходит, будет указано.
Спасибо за ваше время.