码迷,mamicode.com
首页 > 其他好文 > 详细

Qt模拟串口-tcp连接发送数据

时间:2016-05-12 15:21:05      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

上一节已经基本上完成了qt界面的基本布局,下面就是后台数据的发送和接收了,
前面说了,qt和uc/os 交互使用的方式是tcp
为啥要用tcp,而不使用别的呢,
udp:按道理udp是最好的,不用连接,想发就发,不用管端口。但是,qt这个鬼,他封装的udp函数不支持服务器下发数据,也就是udp的服务器不能下发数据,只能接收。
串口:既然是串口通讯,为啥不直接用串口呢。c语言对串口的支持太差了, 很不好用,qt到还好,找个插件就能完成,
所以最后就采用了tcp的传输方式,既可以收发,也可以同时对应多个下位机,

下面就是qt建立tcp服务器的代码,
首先,导入tcp头文件之前,得先再pro文件里面加入这行代码

QT += network

这个是干什么用的??好问题,
咱们打开qt的源码包,—qt是开源的
你在 QT/Qt5.4.1/5.4/mingw491_32/include下面会看到有很多个文件夹,其中就有QtNetword,我们要导入的头文件 QTcpServer.h 就在这个文件夹下面,所以在工程文件里面导入netword文件夹,就可以了。

下面就是具体的代码,tcp的工作原理啊,工作流程什么的, google一大堆,咱就不说了,

int port = ui->comboBox->currentText().toInt();
    tcpSocket = new QTcpServer(this);
    tcpSocket->listen(QHostAddress::Any,port);
    connect(tcpSocket,SIGNAL(newConnection()),this,SLOT(readPendingDatagrams()));
    connect(tcpSocket,SIGNAL(destroyed()),this,SLOT(desConect()));
    void updComm::desConect()
{
    //tcpSocket->
    for(int i=0;i < clientindex;i++)
    {
        if(client[i].client->peerAddress().isNull())
        {
            showInfo("this is a null");

        }
    }

}
void updComm::readPendingDatagrams()
{    
    client[clientindex].client = tcpSocket->nextPendingConnection();
    client[clientindex].name = getUserName();
    client[clientindex].ip = client[clientindex].client->peerAddress();
    qDebug()<<client[clientindex].name;
    qDebug()<<client[clientindex].ip;
    connect(client[clientindex].client,SIGNAL(readyRead()),this,SLOT(readdataforclient()));
    QString data = tr("wxc");
    client[clientindex].client->write(data.toLatin1());
    clientindex++;
}

第一个函数,是定义一个tcp连接,监听所有的连接,端口号是通过界面设定的。
两个connect 一个是有新的链接过来,一个是销毁一个连接的时候触发,
readPendingDatagrams 函数比较复杂一点点,
因为会有很多的下位机连接到tcp端口,所以我们必须得给每一个下位机分配一个tcpSocket,这样每个下位机就是一个单独的个体,能够单独接收他发来的数据,也可以单独给他发送数据,client是一个数组,类型是一个class,表示的是一个下位机,包括名字,ip,还有socket变量,

因为我只有一台机器,IP地址还有name都是一样的,无法筛选制定的下位机,所以销毁函数没有实现。

Qt模拟串口-tcp连接发送数据

标签:

原文地址:http://blog.csdn.net/u010650281/article/details/51361134

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!