一、首先可以在头文件中声明QTcpSocket
//TCP指针
QTcpSocket *m_socket;
二、在源文件中实例化,并监听信号
//网络连接实例化一个QTcpSocket
m_socket = new QTcpSocket;
//TCP监听部分,并转到Widget类中的函数Read_Data处理
QObject::connect(m_socket, &QTcpSocket::readyRead, this, &Widget::Read_Data);
三、连接到服务器
//TCP连接,传入IP地址和Port端口进行连接
//成功返回true,失败返回false
bool Widget::bConnectToTCPServ(QString IP, int Port)
{
m_socket->abort();
m_socket->connectToHost(IP, Port);
//等待连接成功
if (!m_socket->waitForConnected(3000))
{
return false;
}
return true;
}
四、信息发送
//这里发送的是结构体
//内容为十六进制的AAAA0004000100540000
My_Order msg;
memset(&msg, 0, sizeof(msg));
msg.m_Head[0] = 0xAA;
msg.m_Head[1] = 0xAA;
msg.m_Long[0] = 0x00;
msg.m_Long[1] = 0x04;
msg.m_ID[0] = 0x00;
msg.m_ID[1] = 0x01;
msg.m_Type[0] = 0x00;
msg.m_Type[1] = 0x54;
msg.m_Data[0] = 0x00;
msg.m_Data[1] = 0x00;
m_socket->write((char*)&msg, sizeof(msg));
结构体为:
typedef struct My_Order
{
char m_Head[2];
char m_Long[2];
char m_ID[2];
char m_Type[2];
char m_Data[2];
};
五、消息接收以及处理
由于我们在构造函数中监听了QTcpSocket的ReadyRead信号,当有数据从服务端发过来的时候这里的槽函数会被直接调用
///ReadyRead信号槽函数
///接收来自TCP的数据
void Widget::Read_Data()
{
if (m_socket->bytesAvailable())
{
//读取网络缓存中的全部数据
QByteArray arr = m_socket->readAll();
//输出读取到的内容
qDebug()<< arr;
}
}