帮帮我 很难弄啊 qt 多线程 tcp

liyingju001 2013-09-16 11:40:36
废话少说,服务器是lamp,用qt写的监听端口程序,dtu是设定好的,往服务器这个ip的某个端口主动发起连接时候,服务器怎么能监听到,监听到了以后从我的数据库里面读取传感器的id和要发送的命令,因为传感器很多,也就是dtu很多,最好用多线程是吧?并且要求发送采集的命令几乎要同一时间发出,以保证得到的数据也是同一时间的,我觉得这要用多线程。然后继续监听端口,传感器会接到命令后自动返回采集的数据,服务器怎么监听呢?监听后写到数据库。有大侠给指点一二,或者哪有开源的代码(有点不好意思啊)??
...全文
330 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyingju001 2013-10-04
  • 打赏
  • 举报
回复
引用 3 楼 ppdayz 的回复:
Qt官方的例子: Fortune Server Example 简单的说就是Qt封装了一个QTcpServer的类,用这个玩意就可以了,十分的方便
void ForwardServer::incomingConnection(int socketDescriptor)
{
    ForwardLink *link = new ForwardLink(socketDescriptor);
    connect(this, SIGNAL(serverSendLogMSG(QByteArray)), link, SLOT(receiveAndSendLog(QByteArray)));
 
    QThread *thread = new QThread(this);
    link->moveToThread(thread);
 
    connect(link, SIGNAL(destroyed()), thread, SLOT(quit()));
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    connect(thread, SIGNAL(finished()), link, SLOT(deleteLater()));
 
    thread->start();
}
这个是我根据Fortune Server Example这个例子写的一个多线程tcp server, 自己只要实现ForwardLink 就行,接收数据什么的都在ForwardLink 这个类里面完成, 每当一个新的连接要进来,就会new 一个ForwardLink,然后塞到一个线程里面。 server要做的事情就是管理好这些ForwardLink 和线程就可以了。 具体的事情就让ForwardLink来做,这样维护也很方便。 至于版本的问题,估计是你看的接收到的数据的处理吧,设置版本是为了让Qt可以正确处理不用的版本生成的二进制,而你这个数据是自己写的,就不用这么的麻烦,只需要处理好粘包就可以。
if(m_sensor.getSenorValue(m_pkgBuf,val,temp )==true) { qDebug()<<"val"<<val<<endl;//此时还是得到的数值 例如是129 query.prepare("INSERT INTO ib_data_bridge2 (value) VALUES (?)"); query.addBindValue("val");//但是数据库的插入的数值是0 为什么呢 query.exec(); query.clear(); }
ppdayz 2013-09-17
  • 打赏
  • 举报
回复
Qt官方的例子: Fortune Server Example 简单的说就是Qt封装了一个QTcpServer的类,用这个玩意就可以了,十分的方便
void ForwardServer::incomingConnection(int socketDescriptor)
{
    ForwardLink *link = new ForwardLink(socketDescriptor);
    connect(this, SIGNAL(serverSendLogMSG(QByteArray)), link, SLOT(receiveAndSendLog(QByteArray)));
 
    QThread *thread = new QThread(this);
    link->moveToThread(thread);
 
    connect(link, SIGNAL(destroyed()), thread, SLOT(quit()));
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    connect(thread, SIGNAL(finished()), link, SLOT(deleteLater()));
 
    thread->start();
}
这个是我根据Fortune Server Example这个例子写的一个多线程tcp server, 自己只要实现ForwardLink 就行,接收数据什么的都在ForwardLink 这个类里面完成, 每当一个新的连接要进来,就会new 一个ForwardLink,然后塞到一个线程里面。 server要做的事情就是管理好这些ForwardLink 和线程就可以了。 具体的事情就让ForwardLink来做,这样维护也很方便。 至于版本的问题,估计是你看的接收到的数据的处理吧,设置版本是为了让Qt可以正确处理不用的版本生成的二进制,而你这个数据是自己写的,就不用这么的麻烦,只需要处理好粘包就可以。
liyingju001 2013-09-17
  • 打赏
  • 举报
回复
哦 dtu只要一上电就主动给服务器发一个数据包,包含id等信息,只需要解析就可以了,不用那么麻烦
liyingju001 2013-09-16
  • 打赏
  • 举报
回复
我看很多案例,有的是服务器和客户端都是qt,会设置版本,但是我这发出的时候是给dtu或者是传感器,这个还需要设定版本吗?
源码下载地址: https://pan.quark.cn/s/0d6e3002ba51 ### IR2110中文资料知识点详述 #### 一、概述 IR2110是一种专为脉冲宽度调制应用而设计的高性能驱动集成电路,在各类功率转换设备中具有广泛的应用,特别是在需要实现隔离驱动的场景下表现出色。该芯片融合了光电隔离与电磁隔离的优势,能够达成快速响应并保持较小的物理尺寸,尤其适合用于中小功率的变换装置。 #### 二、IR2110内部结构与特点 **1. 内部结构** - **封装形式**:采用DIP14引脚封装。 - **内部组成**:由逻辑输入单元、电平平移单元以及输出保护单元这三个主要部分构成。 - **悬浮电源**:借助自举电路实现,使得高端工作电压最高能够达到500V,支持±50V/ns的电压变化率。 - **工作电压范围**:逻辑电源电压范围为5~15V,输出电源端电压范围为10~20V,易于与其他逻辑电平进行匹配。 - **工作频率**:最高可达到500kHz。 - **功耗**:在15V条件下静态功耗仅为116mW。 - **延迟时间**:导通延迟120ns,关断延迟94ns。 - **峰值输出电流**:图腾柱输出峰值电流为2A。 **2. 特点** - **独立输入通道**:具备独立的低端和高端输入通道配置。 - **兼容性**:逻辑电源地与功率地之间允许±5V的偏移量,便于与TTL或CMOS电平进行匹配。 - **自举电源**:内置自举电源电路,有效减少驱动电源的数量,从而简化电路设计。 - **高dv/dt能力**:具有较强的dv/dt抑制能力,适合高频开关应用。 - **低功耗**:工作状态下功耗较低,有利于提升整体效率。 #### 三、高压侧...

21,498

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧