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

上一节已经基本上完成了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都是一样的,无法筛选制定的下位机,所以销毁函数没有实现。

时间: 2024-10-10 20:14:24

Qt模拟串口-tcp连接发送数据的相关文章

Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协议发送数据: • 创建发送端的Socket对象• 这一步如果成功,就说明连接已经建立成功了.• 获取输出流,写数据• 释放资源 2. 代码实现: (1)发送端: 1 package cn.itcast_06; 2 3 import java.io.IOException; 4 import java

linux串口驱动分析——发送数据

一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数,找到使用的file_operations,即应用程序与tty架构的统一接口.步骤不再赘述. static const struct file_operations tty_fops = { .llseek = no_llseek, .read = tty_read, .write = tty_wr

51单片机串口接收和发送数据

第一种方法:在中断中处理 typedef unsigned char UINT8; volatile UINT8 u8Uart_Data; void InitialUART0_Timer1() { SCON = 0x50; //2015-05-04 TMOD = 0x20; TH1 = 0XFD; // 9600BPS 2015-05-04 wangrong TL1 = 0XFD; TR1 = 1; // start timer0 ES = 1; // Enable serial interru

串口发送数据——字符串发送与十六进制发送的区别

转自:http://blog.csdn.net/wityy/article/details/8234739 串口发送数据——字符串发送与十六进制发送的区别 在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照

串口字符串发送数据

在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照二进制的方式一位一位的发送出去. 例如我们要发送一串数据"A852010100000000A91A",以字符串和十六进制两种方式发送: (1)字符

stm32RS485串口通信——中断接收发送数据

功能:通过PC机的串口调试助手发送数据给串口A,串口B接收到串口A发送的数据,再由串口B将接收到的数据返回给PC机的串口调试助手. PC->串口A->串口B->PC. 实验平台:stm32f407 /********************************************************************* 本平台具有六个串口: com1  485 com2 com3  232 需一个管脚控制DTU com4 485 com5  调试串口  TTL com6

TCP连接如何断开连接

我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接:通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接:然后,两者就可以基于这个socket连接通信了.连接结束后,客户端(进程)会退出:在不需要继续处理客户请求的情况下,服务器(进程)也将退出.而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套接字,这里将触发TCP的四次挥手进而关闭一个socket连接.但是,在一些异常的情况下,譬如:服务器

转:Qt编写串口通信程序全程图文讲解

转载:http://blog.csdn.net/yafeilinux/article/details/4717706  作者:yafeilinux (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourceforge.net/projects/qextser

Qt编写串口通信程序全程图文解说

(说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改.) 在Qt中并没有特定的串口控制类,如今大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们能够去 http://sourceforge.net/projects/qextserialport/files/ 进行下载,也能够去下载我上传到网上的: http://download.csdn.net/source/176278