连接NTrip服务器一connect就失败
ntrip服务器是需要验证的,
需要2步,
第一步connect,
第二步发送check cmd
这二步是连续的,要不然服务器就会拒绝,显示一连就失败。
由于年初连过一次ntrip服务器,由于间隔久了,不记得踩过的坑了。
这不 年尾又要去使用这块功能,重新添加了下 代码,由于一个忽略,折腾了2天才找到原因
年初写的一个版本tcpclient类里有做修改,但是这个修改没有在目前使用的项目中改过来,所以一直没有发现是这个原因。
由于ntrip服务使用qtconcurrent::run重启了一个线程去发送。
结果是在tcpclient类的SendMsg中未flush,造成未发到服务器,
所以如果不同线程间发送。注意要 flush。
bool DTSTcpClient::SendMsg(const char* msg, int nSize)
{
if(NULL == pDataSocket){
return false;
}
//QByteArray dataArr = msg;
int rc = pDataSocket->write(msg,nSize);
pDataSocket->flush();//专门为QThread中new socket 发送数据添加的
qDebug()<<"write socket:"<<msg;
if(rc != -1)
{
return true;
}
else
return false;
}
//20210927
又一次在添加该功能后运行程 序 没成功。查看输出如下,显示发命令后 socket断开了。
没看出来是哪的原因
使用第三方socket工具,连Ntrip服务后,随便 发送GGA,或者验证码,都会引起连接断开。。。
再次通过另一个软件验证那个千寻帐号竟然真连不上。。。
重新在一个测试demo上添加该功能 的代码:
一连接就反回这个信息,然后也断开了,这个测试demo把里面的IP 地址和端口换成本机开启的一个tcpserver服务来测试,是可以连接的,说明socket是通的。
至于返回的那个可能是跟服务器验证有关,但是验证也做了。NND,原来是帐号写错了,这个帐号不行,换一个就可以了
换个帐号虽然验证通过了,不知道为什么,并没有再继续返回差分数据:
跟以前搞的可以连通的程序对比了下,没看出什么问题,想破脑袋也没想出来 为啥不返回差分数据。。。。。
正要放弃时,突然再运行程序,就能收到差分了,我X,真没修改哪,之前改过的每次都运行了,也没有数据,为什么突然好了,还有没天理了
但是 这是个win下的demo, 在接收机里面使用,一连接服务端,随便 发个什么都会断开的,再用socket工具测试也一样。又出这毛病了。愁死了。
没办法最后再试试这个开发板里的socket是不是通的,费点劲模拟一个服务端,让他们在一个局域网内。再运行一下看看,也是通的,
不过仔细一看发现原因了:
服务端收到连接后会发现收到有一个:REG NtripClient ,就是这个消息引起的问题,Ntrip服务器首先收到的是验证信息,如果验证不通过就给你关闭,所以不要多发任何多余的东西。
对应的代码里:多的玩意儿,赶紧删了
经验证:
1.模拟GGA的时间必须是UTC时间,不能用本地时间,否则不返回差分数据
2.给ntrip服务端 不要发送任何无关数据。
第二天再试,怎么还是会出现一连就断开的情况。。。郁闷。。。
(由于接收机中IP及用户帐号配置是在一个配置文件中添加的,给清空了,又手动添加一遍,把用户和密码写反了引起的。。。。)