[原][JSBSim]基于qt代码实现:TCP|UDP与飞行模拟软件JSBSim的通信,现实模型飞行!
废话没有,上关键代码
头文件
#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的通信,现实模型飞行!的更多相关文章
- [原][译][osg][osgEarth]飞行模拟软件JSBSim的操作(FGFCS类)
英文原文在 FGFCS.h头文件中 JSBSim的控制操作封装了飞行控制系统(FCS)的功能. 这个FGFCS类还封装了相同的“系统”和“自动驾驶仪”能力. FGFCS包含用来定义一个系统或飞行模型体 ...
- 基于Qt实现的TCP端口数据转发服务器
对于Qt,比较喜欢qt的sdk框架,我也是用于做一些工作中用到的工具软件,基于qt的sdk做起来也比较快: 一.概述 今天要说的这个tcp端口转发服务器,主要是用于将监听端口的数据转发到另外一个服务器 ...
- 分享基于Qt5开发的一款故障波形模拟软件
背景介绍 这是一款采用Qt5编写的用于生成故障模拟波形的软件.生成的波形数据用于下发到终端机器生成对应的故障类型,用于培训相关设备维护人员的故障排查技能.因此,在这款软件中实现了故障方案管理.故障波形 ...
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(流浪小狗,六篇,附下载地址)
本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数 ...
- 一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述
本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/Sclient-服务集群应用需求而搭建. 连接监听.传输数据.数据处理均在独立的线程池中进行,依据特定任务不同,可安排负责监听.传输.处理 ...
- QQ--基于TCP/UDP协议的通讯原理
QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的! 一 ...
- [转][linux]简单的linux下的tcp/udp
转自:https://blog.csdn.net/cabing2005/article/details/53068880 详细函数以及参数解释请看原链接. windows下的tcp/udp参考:htt ...
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(一) 综述
本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数 ...
- TCP/UDP端口列表
http://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8 TCP/UDP端口列表 本条目可通过翻译外语维 ...
随机推荐
- PAT乙级 1024. 科学计数法 (20)(未通过全部测试,得分18)
1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...
- jQuery delay() 方法
定义和用法 delay() 方法对队列中的下一项的执行设置延迟. 语法 $(selector).delay(speed,queueName) 参数 描述 speed 可选.规定延迟的速度. 可能的值: ...
- SQL Server报“GUID应包含带4个短划线的32位数”
转自:http://www.seayee.net/article/info_106.html 最近在配置一台服务器的MS SQL Server 2005的维护计划自动备份数据库,能创建维护计划,但设置 ...
- python json-json.loads()函数中的字符串需要是严格的json串格式,不能包含单引号
先看下json的dumps()和loads()函数的定义 json.dumps():将一个Python对象编码成JSON字符串.把字典对象转换成json串 json.loads():将JSON格式字符 ...
- ES6学习笔记之map、set与数组、对象的对比
ES6 ES5中的数据结构,主要是用Array和Object.在ES6中主要新增了Set和Map数据结构.到目前为止,常用的数据结构有四种Array.Object.Set.Map.下面话不多说了,来一 ...
- Centos下安装git高版本2.1.2
安装依赖软件 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc # yum in ...
- spring mvc @ModelAttribute 每次执行requestmapping前自动执行
在不少应用场景中,我们希望在每次执行requestmapping前自动执行一些操作,比如把某些数据(比如数据字典.系统配置.标准错误号,这在企业应用系统中极为常见)塞到model中供view访问,因为 ...
- 20145122《 Java网络编程》实验五实验报告
实验名称 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145120黄玄曦 博客地址:http://www.cnblo ...
- 20145205 武钰 《网络对抗》Exp8 Web基础
一点题外话 本次实验我三号完成的,由于一些原因吧,一直没发博客,拖到了现在,这里说就是评判一下自己的懒惰. 实验后问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成 ...
- Python字典猜解
摘要 目标 使用Python破解WordPress用户密码 使用Python破解zip压缩包密码 思路 通过表单提交项构建数据包,使用字典中的可选字符进行逐一排列组合暴力破解WordPress的用户密 ...