首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Qt模拟gps数据以便与traccar一起使用

使用Qt模拟gps数据以便与traccar一起使用
EN

Stack Overflow用户
提问于 2020-01-21 10:21:05
回答 1查看 141关注 0票数 1

我正在尝试写一个全球定位系统的模拟器与QT c++。它将用于将数据发送到Traccar跟踪应用程序。Traccar使用本地主机端口5055接收数据包,并使用数据包中的数据绘制位置。我没有成功地让traccar读取数据包。Traccar希望看到HTML格式的数据包。我不确定我的程序是否正确地格式化了数据。所有以//\开头的行都显示了我尝试过的内容。

这是程序的一部分,用于将数据写入loalhost端口5055:

代码语言:javascript
复制
// write to localhost if timer seconds is greater than or equal to desired time
if(scnds >= ui -> updateBox -> text().toDouble()) { 
 //\\   QString sendString = "/?id=" + id$ + "&Lat=" +lat$ + "&Lon=" + lon$ + "&Speed=" + speed$ + "&Course=" + course$ + "\r\n\r\n\r\n\r\n";
 //\\   QString sendString = "/?id=" + id$ + "&Lat=" +lat$ + "&Lon=" + lon$ + "&Speed=" + speed$ + "&Course=" + course$;
 //\\   QString sendString = "id=" + id$ + "&Lat=" +lat$ + "&Lon=" + lon$ + "&Speed=" + speed$ + "&Course=" + course$ + "\r\n\r\n\r\n\r\n";
 //\\   QString sendString = "id=" + id$ + "&Lat=" +lat$ + "&Lon=" + lon$ + "&Speed=" + speed$ + "&Course=" + course$;
    QString sendString = "/?id=123456&lat=40.730610&lon=-73.935600&speed=100&Course=45\r\n\r\n\r\n\r\n";
 //\\   QString sendString = "/?id=123456&lat=40.730610&lon=-73.935600&speed=100&Course=45";
 //\\   QString sendString = "id=123456&lat=40.730610&lon=-73.935600&speed=100&Course=45\r\n\r\n\r\n\r\n";
 //\\   QString sendString = "id=123456&lat=40.730610&lon=-73.935600&speed=100&Course=45";
    QByteArray gpsdata = sendString.toUtf8();//     .toLocal8Bit(); .toUtf8(); .toLatin1();    
    socket = new QTcpSocket(this);
    socket -> connectToHost("localhost",5055);
    if (socket -> waitForConnected(3000)){
        ui -> receivedMessage -> append("Connected");
        socket -> write(gpsdata);
        socket -> waitForBytesWritten(1000);
        socket -> waitForReadyRead(3000);
        ui -> receivedMessage -> append(QString::number(socket -> bytesAvailable()) + " ");
        ui -> receivedMessage -> append(socket -> readAll());
        socket -> close();
        ui -> sentMessage -> setText(gpsdata);
    }
    else {
        ui -> receivedMessage -> append("Not connected");
        ui -> timerLabel -> setNum(0);
    }

tracca日志显示以下内容:

代码语言:javascript
复制
2020-01-18 18:36:41  INFO: [afa16fa9] connected
2020-01-18 18:36:41  INFO: [afa16fa9: osmand < 0:0:0:0:0:0:0:1] HEX: 2f3f69643d313233343536266c61743d33322e35343738266c6f6e3d2d39392e373435322674696d657374616d703d302668646f703d3526616c7469747564653d3130302673706565643d31303020485454502f312e31200d0a0d0a0d0a0d0a
2020-01-18 18:36:41  INFO: [afa16fa9: osmand > 0:0:0:0:0:0:0:1] HEX: 485454502f312e31203430302042616420526571756573740d0a636f6e74656e742d6c656e6774683a20300d0a0d0a
2020-01-18 18:36:41  INFO: [afa16fa9] disconnected

正如您所看到的,traccar日志显示程序正在连接,但数据没有被解码。我知道traccar是有效的,因为我可以从web浏览器发送数据,然后解码并绘制。

如有任何建议,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 02:11:53

尝尝这个。这是我的工作:

代码语言:javascript
复制
void MainWindow::on_pushButton_3_clicked()
{
    QString sendString = "/id=123456&lat=50.030610&lon=33.335600&speed=100&Course=45";
    QUrl theurl;
    theurl = "http://127.0.0.1:5055";

    QByteArray gpsdata = sendString.toUtf8();
    qDebug()<<gpsdata;
    socket = new QTcpSocket(this);

    socket -> connectToHost(theurl.host(),5055);
    if (socket -> waitForConnected(3000)){
        socket->write("GET /?id=123456&lat=50.030610&lon=33.335600&speed=100&Course=45 HTTP/1.1\r\n"
                      "host: " + theurl.host().toUtf8() + "\r\n\r\n");
        socket -> waitForBytesWritten(1000);
        socket -> waitForReadyRead(1000);
        QByteArray ba;
        ba.append(socket -> readAll());
        socket -> close();
        qDebug()<<ba;

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59833375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档