目录
[添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数](#添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数)
[添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数](#添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数)
头文件
#include <QtNetwork>
模块
在pro里添加 QT += core gui network
实战
tcp客户端
配置ui界面
添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数
在pro文件里
QT += core gui network
#include <QTcpSocket>
private:
QTcpSocket *m_tcpSocket;
private slots:
void onRecvDataSlot();
void onConnectToServer();
在ui界面的构造函数里添加
//1、实例化客户端类的对象
m_tcpSocket = new QTcpSocket;
实现连接服务器按钮点击事件
//连接服务器
void Widget::on_btn_connect_clicked()
{
//2、获取服务器的IP地址和端口号
QString ip = ui->lineEdit_ip->text();
quint16 port = ui->lineEdit_port->text().toUInt();
//3、连接服务器
m_tcpSocket->connectToHost(QHostAddress(ip),port);
//如果连接成功,自动发射出信号 connected(),关联槽函数,在槽函数中提示一下连接成功
connect(m_tcpSocket,&QTcpSocket::connected,this,&Widget::onConnectToServer); //lambada表达式匿名的函数
//4、当服务器有数据发送过来的时候,m_tcpSocket会自动发射一个readyRead信号,关联槽函数,在槽函数中接收数据
connect(m_tcpSocket,&QTcpSocket::readyRead,this,&Widget::onRecvDataSlot);
}
槽函数实现
//数据接收槽函数
void Widget::onRecvDataSlot()
{
//读取网络中套接字的数据
QByteArray data = m_tcpSocket->readAll();
ui->textBrowser->append(data);
}
//连接槽函数
void Widget::onConnectToServer()
{
ui->textBrowser->append("连接成功");
}
发送数据按钮点击事件
void Widget::on_btn_send_clicked()
{
QString data = ui->textEdit->toPlainText();
m_tcpSocket->write(data.toUtf8().data());
}
tcp服务端
配置ui界面
添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数
QT += core gui network
#include <QTcpServer>
#include <QTcpSocket>
private:
QTcpServer *m_tcpServer;
QTcpSocket *newClient;
private slots:
void onRecvDataSlot();
void onRecvNewClient();
在ui界面的构造函数里添加
//1、实例化服务器类的对象
m_tcpServer = new QTcpServer;
//2、绑定自己的IP地址和端口号、并且监听
m_tcpServer->listen(QHostAddress::Any,12000);
//3、如果有新的客户端连接上来,m_tcpServer对象会自动发射一个信号newConnection()
//关联槽函数,在槽函数中接收 新的客户端的对象的连接
connect(m_tcpServer,&QTcpServer::newConnection,this,&Widget::onRecvNewClient);
槽函数实现
//接收数据槽函数
void Widget::onRecvDataSlot()
{
QByteArray data = newClient->readAll();
ui->textBrowser->append(data);
}
//接收客户端槽函数
void Widget::onRecvNewClient()
{
//接收新的客户端对象
newClient = m_tcpServer->nextPendingConnection();
//如果有客户端发送数据过来,那么newClient会自动发射 readyRead信号,关联槽函数,接收数据
connect(newClient,&QTcpSocket::readyRead,this,&Widget::onRecvDataSlot);
//把连接上来的客户端IP 和端口号 打印到界面上
QString text = QString("有新的客户端连接上来 IP:%1 Port:%2")
.arg(newClient->peerAddress().toString()
.arg(newClient->peerPort()));
ui->textBrowser->append(text);
}
发送数据按钮点击事件
//发送数据
void Widget::on_btn_send_clicked()
{
//1 获取你要发送的数据
QString data = ui->textEdit->toPlainText();
//2 发送
newClient->write(data.toUtf8().data());
}