首先上位机中通过新建一个tcpserver:
tcpServer = new QTcpServer(this);来实现与下位机的对接。
connect(tcpServer,SIGNAL(newConnection()), this, SLOT(sendFortune()));
建立一个新的QTcpSocket:
tcpServerConnection=new QTcpSocket(this);
一般产生的信号都要包括以下四个(三个connect,和一个监听,先监听)
tcpServerConnection = tcpServer->nextPendingConnection();//设置监听
connect(tcpServerConnection,SIGNAL(disconnected()),tcpServerConnection,SLOT(deleteLater()));
connect(tcpServerConnection,SIGNAL(readyRead()),this,SLOT(Read_Data()));//当有数据到来时,触发slot
connect(tcpServerConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(DisplayError(QAbstractSocket::SocketError)));
当tcpServer和下位机的tcpSocket建立了通讯的时候发出newConnection()信号,出发槽信号sendFortune()
为连接并未成功的触发信号,触发删除控制操作。
Read_Data()是在已经连接好了,触发的槽信号,设置传输的数据流为Qt_5_3的版本,然后接收收到的视频流数据,得到的图像显示在Qlable上。
DisplayError(QAbstractSocket::SocketError)是在连接错误的时候触发,触发命令
tcpServerConnection->close()使得连接断开。
以下为下位机部分程序:
tcpsocket=newQTcpSocket(this);
connect(tcpsocket,SIGNAL(connected()),this,SLOT(slotConnect()));
connect(tcpsocket,SIGNAL(disconnected()),this,SLOT(slotDisconnect()));
connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(data_get()));
tcpsocket->connectToHost(*serveIP,port);
slotConnect()是连接成功触发的,本次放入的是提示框,显示连接成功。
slotDisconnect()在未连接成功的时,触发opencamerabut->setEnabled(false);命令使得opencameabut无法被使用。data_get()是在连接成功并准备好了数据传输的时候触发,tcpsocket->readAll();可以接收到上位机给的命令字符,通过判断不同的字符实现不同的操作。tcpsocket->connectToHost(*serveIP,port);是开始进行与输入的地址的上位机进行连接,与上位机进行握手建立通讯。
最后通过
QByteArray Rec = tcpsocket->readAll();
来实现接收字符,通过
tcpServerConnection = tcpServer->nextPendingConnection();//设置监听
来实现监听和以下三个connect;通过
tcpServerConnection->write("发送的字符");来实现发送数据;
本文介绍了如何在QT环境中实现TCP通信。上位机通过QTcpServer建立服务器端,监听并处理来自下位机的TCP连接。当连接建立、数据到来或出现错误时,触发相应的槽函数进行处理。下位机则通过QTcpSocket发起连接,并在连接成功、断开或准备读取数据时执行相应操作。通信过程中,数据传输包括视频流和控制指令,实现了双向交互。

5434

被折叠的 条评论
为什么被折叠?



