当前位置: 代码迷 >> QT开发 >> 帮帮小弟我 很难弄啊 qt 多线程 tcp
  详细解决方案

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

热度:573   发布时间:2016-04-25 03:38:58.0
帮帮我 很难弄啊 qt 多线程 tcp
废话少说,服务器是lamp,用qt写的监听端口程序,dtu是设定好的,往服务器这个ip的某个端口主动发起连接时候,服务器怎么能监听到,监听到了以后从我的数据库里面读取传感器的id和要发送的命令,因为传感器很多,也就是dtu很多,最好用多线程是吧?并且要求发送采集的命令几乎要同一时间发出,以保证得到的数据也是同一时间的,我觉得这要用多线程。然后继续监听端口,传感器会接到命令后自动返回采集的数据,服务器怎么监听呢?监听后写到数据库。有大侠给指点一二,或者哪有开源的代码(有点不好意思啊)??
qt 多线程 tcp

------解决方案--------------------
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可以正确处理不用的版本生成的二进制,而你这个数据是自己写的,就不用这么的麻烦,只需要处理好粘包就可以。
  相关解决方案