• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > QT界面如何与局域网中的设备进行一对一数据交互?

QT界面如何与局域网中的设备进行一对一数据交互?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了qt界面,qt界面美化,qt界面开发,qt界面开发实例,qt界面编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:QT界面如何与局域网中的设备进行一对一数据交互?
描述:

QT网卡嵌入式局域网摄像头

我用QT编写了一个用户界面,用来操作局域网中的设备(网络摄像头之类),
我通过QUdpSocket组播的方式把我的Mac地址打包成Xml数据报,然后发送出去,
设备通过嵌入式编程接收并解析我发的数据报,
然后设备将自己的Mac打包成Xml回执报文,发送到解析得出的Mac地址上(也就是我的网卡上),
然后我获取到数据解析得到他的Mac地址
我为设备分配一个IP然后将设置结果以单播形式发送到他的网卡上
目前的问题是,我的数据组播出去,且他已经成功解析并向我发送了回执
但是我却接收不到他的报文,自然也就无法解析
我的代码如下:
socketxml.h文件
--------------------------------
#ifndef SOCKETXML_H
#define SOCKETXML_H
#include <QThread>
#include <QString>
#include <QtNetwork>
#include <QTimer>
#include <QByteArray>
#include "global.h"
class SocketXml : public QThread
{
    Q_OBJECT
public:
    SocketXml();
    ~SocketXml();
public slots:
    void SendXmlBuf(QString str);     //发送Xml数据
    void RecvXmlBuf();                //接收Xml数据
protected:
    void run();                       //处理收发操作线程
private:
    QUdpSocket *udpsocket;
};
#endif // SOCKETXML_H
************************************************************************************************************
socketxml.cpp
----------------------------------------
#include "socketxml.h"
#include <QDebug>
SocketXml::SocketXml()
{
    udpsocket= new QUdpSocket(this);
    //udpsocket->bind(QHostAddress::AnyIPv4,Global::Instance().port,QUdpSocket::ReuseAddressHint);
    udpsocket->bind(Global::Instance().port,QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
    udpsocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,1);
    udpsocket->setSocketOption(QAbstractSocket::MulticastTtlOption,255);
    udpsocket->joinMulticastGroup(QHostAddress(Global::Instance().Mucst_ip));
}
SocketXml::~SocketXml()
{
    quit();
    wait();
    delete udpsocket;
}
/*!
 * \brief SocketXml::SendXmlBuf
 * \param str
 * 发送数据
 */
void SocketXml::SendXmlBuf(QString str)
{
    int len=udpsocket->writeDatagram(                            //调用QUdpSocket成员函数writeDatagram()发送数据
                str.toLatin1().data(),                           //将数据转换成字符串(char*)格式
                str.length(),                                    //发送字符串长度
                //QHostAddress(Global::Instance().Mucst_ip),       //发送数据到组播IP
                QHostAddress::Broadcast,                       //发送到组内所有主机
                Global::Instance().port);                        //发送端口
    if(len!=-1)
    {
        qDebug()<<"writeDatagram已发送"<<len<<"字节数据";
    }
    else
    {
        qDebug()<<"发送失败";
    }
}
/*!
 * \brief SocketXml::RecvXmlBuf
 * 接收数据
 */
void SocketXml::RecvXmlBuf()
{
    qDebug()<<"正在检测...";
    while(udpsocket->hasPendingDatagrams())
    {
        qDebug()<<"hasPendingDatagrams检测到数据包";
        QByteArray byte;
        QHostAddress getaddr;
        quint16 getport;
        byte.resize(udpsocket->pendingDatagramSize());
        int strsize=udpsocket->readDatagram(
                    byte.data(),           //数据内容
                    byte.size(),           //数据大小
                    &getaddr,              //发送者地址
                    &getport);             //发送者端口
        qDebug()<<"readDatagram读入"<<strsize<<"字节数据";
        Global::Instance().RecvBuf.append(byte);
        qDebug()<<"发送者地址:"<<getaddr<<"发送者端口:"<<getport;
    }
}
/*!
 * \brief SocketXml::run
 * 重写QThread虚函数run(),用于添加线程工作
 */
void SocketXml::run()
{
    if(Global::Instance().flag)
    {
        while(!Global::Instance().SendBuf.isEmpty())
        {
  &n
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • QT界面如何与局域网中的设备进行一对一数据交互?

相关文章

  • 2017-06-05 STM32的DFU是否支持APP和IAP的版本?
  • 2017-06-05 新手上路,请高手指点(关于读卡器驱动)
  • 2017-06-17中断控制器
  • 2017-06-05 i2c概率性读失败
  • 2017-06-05 s25fl256sspinorflash地址模式疑问
  • 2017-06-05 RGB灯带控制
  • 2017-06-05 Lua中如何获取中文字符串的长度?
  • 2017-06-05 非root用户修改给自己用的DNS
  • 2017-06-05 有关局域网数据包拦截的问题
  • 2017-06-05 有做过SmartCard智能卡非接触式读卡器驱动开发的吗?SmartcardInitialize返回失败,如何破?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • usbmassstorage中如何获得硬盘容量
    • 寻求usb驱动程序开发者共同研究问题
    • Mac上安装lua的编辑器?
    • WEB服务器照书上打的程序,有点问题,大家帮我看看吧
    • [求助]关于DDK用的编译器
    • 要做毕业设计了,望各位给提些建议?
    • ArmV7指令跑Wince6的系统MMU初始化的代码需要修改吗?
    • 关于ISE中NGC文件调用
    • 谁能给一个打印监控驱动的思路?
    • s3c440x+pdiusbd12关于usb枚举不成功的问题?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有