废话没有,上关键代码

头文件

#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. 使用Fiddler远程抓包

    Fiddler简介以及web抓包 一.Fiddler简介 简单来说,Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯.网上简介很多,我们不多说. 二 ...

  2. testng入门教程9 TestNG依赖测试

    有时候,你可能需要在一个特定的顺序调用方法在测试案例,或你想分享一些数据和方法之间的状态.TestNG支持这种依赖测试方法之间的显式依赖它支持声明. TestNG允许指定依赖,无论与否: 使用属性de ...

  3. linq to sql 左联接出错,未将对象引用设置到实例

    var result = from a in model join b in orderDetailModel on a.FoodMenuID equals b.FoodMenuID into g f ...

  4. Header实现文件下载

    function download($file){ //文件根路径 $filename=$_SERVER['DOCUMENT_ROOT'].__ROOT__.'/'.$file; //下载文件 if( ...

  5. 让声音更清晰,用PR去掉视频中的噪音

    Premiere V7.0没有支持当前文件类型的输入源的问题 25 我是新手,把DVD影片放到电脑里,显示的是VOB文件,导入类型显示的是所有支持格式,于是我就点击了VOB文件,但是说没有支持当前文件 ...

  6. mysql插入和更新时自动更新为当前时间

    创建表的时候添加 CREATE TABLE `tmp` (   `id` varchar(32) NOT NULL,  `update_time ` timestamp NOT NULL DEFAUL ...

  7. yii2 restful api——app接口编程实例

    <?php namespace common\components; use common\models\Cart; use common\models\User; use Yii; use y ...

  8. ActiveMQ 集群负载平衡

    目前的架构: 负载均衡方案:========================================= 第二种方案呢,假设我们整个应用是个食堂,这个食堂里面有好多饭口,每个饭口有好多大爷大妈( ...

  9. Python: 字符串搜索和匹配,re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法

    1. 使用find()方法 >>> text = 'yeah, but no, but yeah, but no, but yeah' >>> text.find( ...

  10. linux常用命令:less 命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...