废话没有,上关键代码

头文件

#include <QUdpSocket>
#include <qtcpsocket.h>
#ifndef vrUDP
#define vrUDP #define PLANE_DATA_NUM 30 struct PlanePoseStruct{
double lon;
double lat;
double height;
double heading;
double pitch;
double rotate;
}; class JSBSimSocket : public QObject
{
Q_OBJECT
public:
JSBSimSocket();
~JSBSimSocket();
void initNet();
void sendPlaneControlData(char * data, int length);
private slots:
void recvPlanePose();
void recvTcpBack();
private:
QTcpSocket *m_control_TcpSocket;
QUdpSocket *m_get_UdpSocket;
QHostAddress m_get_udphost;
quint16 m_get_UdpPort; double m_JSBSimData[PLANE_DATA_NUM]; ·······
};

源文件

#include "vrUDP.h"

JSBSimSocket::JSBSimSocket()
{
} JSBSimSocket::~JSBSimSocket()
{
} void JSBSimSocket::initNet()
{
//用于控制端,基于QT_TCP客服端:飞机控制发送,信息反馈
QHostAddress tcp_host = QHostAddress::LocalHost;//这里请用xml数据
quint16 tcp_port = ;//这里请用xml数据
m_control_TcpSocket = new QTcpSocket;
m_control_TcpSocket->connectToHost(tcp_host, tcp_port);
m_control_TcpSocket->waitForConnected();
connect(m_control_TcpSocket, SIGNAL(readyRead()), this, SLOT(recvTcpBack()));
m_control_TcpSocket->waitForReadyRead(); //用于获取飞行姿态,基于QT_UDP的服务器。
m_get_udphost = QHostAddress::Any;//这里请用xml数据
m_get_UdpPort = ;//这里请用xml数据
m_get_UdpSocket = new QUdpSocket;
m_get_UdpSocket->bind(m_get_udphost,m_get_UdpPort);
connect(m_get_UdpSocket,SIGNAL(readyRead()),this,SLOT(recvPlanePose()));
} void JSBSimSocket::sendPlaneControlData(char * data, int length)
{
//发送控制信息
//通信的关键就在于这个data的组织
//具体的通讯内容要参考JSBSim的数据结构
int re = m_control_TcpSocket->write(data);
if (re == - )
{
printf("send error");
}
} void JSBSimSocket::recvTcpBack()
{
char buffer[];
qint64 size = m_control_TcpSocket->read(buffer, );
if (size > )
{
//这里获取TCP的反馈,可以进行后期交互操作
buffer[size] = '\0';
printf("recvTcpBack:%s", buffer);
}
} void JSBSimSocket::recvPlanePose()
{
char buffer[];
qint64 size = m_get_UdpSocket->readDatagram(buffer, sizeof(PlanePoseStruct));
if (size > )
{
buffer[size] = '\0';
memcpy(&m_JSBSimData[], buffer, size); m_PlanePose.lon = m_JSBSimData[];
m_PlanePose.lat = m_JSBSimData[];
m_PlanePose.height = m_JSBSimData[] / 3.2808;
m_PlanePose.rotate = m_JSBSimData[] / 3.14 * ;
m_PlanePose.pitch = m_JSBSimData[] / 3.14 * ;
m_PlanePose.heading = m_JSBSimData[] / 3.14 * ; ···············
}
} ···············

简单说一下:

我的功能是控制飞机的驾驶并用TCP告诉JSBSim。

JSBSim算当前飞机姿态,然后通过UDP告诉我飞机姿态

至于,为什么不用TCP一次性搞定,因为。。。我只是想试下TCP|UDP可以么。。。

关于JSBSim端怎么实现的,这个看看它源码自己研究下就可以喽!

[原][JSBSim]基于qt代码实现:TCP|UDP与飞行模拟软件JSBSim的通信,现实模型飞行!的更多相关文章

  1. [原][译][osg][osgEarth]飞行模拟软件JSBSim的操作(FGFCS类)

    英文原文在 FGFCS.h头文件中 JSBSim的控制操作封装了飞行控制系统(FCS)的功能. 这个FGFCS类还封装了相同的“系统”和“自动驾驶仪”能力. FGFCS包含用来定义一个系统或飞行模型体 ...

  2. 基于Qt实现的TCP端口数据转发服务器

    对于Qt,比较喜欢qt的sdk框架,我也是用于做一些工作中用到的工具软件,基于qt的sdk做起来也比较快: 一.概述 今天要说的这个tcp端口转发服务器,主要是用于将监听端口的数据转发到另外一个服务器 ...

  3. 分享基于Qt5开发的一款故障波形模拟软件

    背景介绍 这是一款采用Qt5编写的用于生成故障模拟波形的软件.生成的波形数据用于下发到终端机器生成对应的故障类型,用于培训相关设备维护人员的故障排查技能.因此,在这款软件中实现了故障方案管理.故障波形 ...

  4. 一种基于Qt的可伸缩的全异步C/S架构服务器实现(流浪小狗,六篇,附下载地址)

    本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数 ...

  5. 一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述

    本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/Sclient-服务集群应用需求而搭建. 连接监听.传输数据.数据处理均在独立的线程池中进行,依据特定任务不同,可安排负责监听.传输.处理 ...

  6. QQ--基于TCP/UDP协议的通讯原理

    QQ是一个基于TCP/UDP协议的通讯软件  发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!   一 ...

  7. [转][linux]简单的linux下的tcp/udp

    转自:https://blog.csdn.net/cabing2005/article/details/53068880 详细函数以及参数解释请看原链接. windows下的tcp/udp参考:htt ...

  8. 一种基于Qt的可伸缩的全异步C/S架构服务器实现(一) 综述

    本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数 ...

  9. TCP/UDP端口列表

    http://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8 TCP/UDP端口列表     本条目可通过翻译外语维 ...

随机推荐

  1. jmeter Bean Shell的使用(二)

    BeanShell的用法 在此介绍下BeanShell PreProcessor的用法,其它的beahshell可以类推.在此我们使用beahshell调用自己写的工具类,工具类实现了密码的加.解密功 ...

  2. iOS UI基础-4.0应用程序管理

    功能与界面 功能分析: 以九宫格的形式展示应用信息 点击下载按钮后,做出相应的操作 步骤分析: 加载应用信息 根据应用的个数创建对应的view 监听下载按钮点击 整个应用界面: 程序实现 思路 UI布 ...

  3. 1.0ARM体系结构-ARM体系结构

    对ARMcpu有整体而专业的认识. ARM只是设计arm核,而不生产. ARM 掌握的是标准.

  4. php下载解决中文乱码问题

    利用 iconv() 函数解决乱码 $file_name = iconv("utf-8","gb2312",$file_name); 具体下载代码如下: pub ...

  5. ACM 未解决的问题

    还没有搞定的ACM问题列表. google code jam Round1A Round1B Round1C Round2 Round3 Onsite Finals 百度之星 一.资格赛题目: dis ...

  6. dedecms开启报错

    php.ini里面设置display_errors = On 开启错误提示,error_reporting = E_ALL & ~E_NOTICE 设置错误等级.也可以在php文件中ini_s ...

  7. Echarts使用及动态加载图表数据 折线图X轴数据动态加载

    Echarts简介 echarts,缩写来自Enterprise Charts,商业级数据图表,一个纯JavaScript的图表库,来自百度...我想应该够简洁了 使用Echarts 目前,就官网的文 ...

  8. 模仿WIN32程序处理消息

    #include "stdafx.h" #include "MyMessage.h" #include <conio.h> using namesp ...

  9. 改变 select下拉框 样式

    select{ outline: none; text-indent: 10px; height: 45px; line-height: 45px; width: 100%; border:1px s ...

  10. 概率检索模型:BIM+BM25+BM25F

    1. 概率排序原理 以往的向量空间模型是将query和文档使用向量表示然后计算其内容相似性来进行相关性估计的,而概率检索模型是一种直接对用户需求进行相关性的建模方法,一个query进来,将所有的文档分 ...