关于C++QT网络类简单的服务器和客户端的应用
1.网络类服务器的头文件
#include<qtcpserver.h>//服务器类的头文件
#include<qtcpsocket.h>//接口头类文件
2.网络类的声明
public:
QTcpServer* tcpServer;//创建一个服务器类的指针
QTcpScket* tcpsocket;//创建一个接口类的指针
3.网络类的使用
tcpServer =NULL;//指针置空,这里是可以安排的
tcpSocket =NULL;//指针置空,这里是可以安排的
tcpServer=new QTcpServer(this);//在堆区开辟一个TcpServer类
tcpServer->listen(QHostAddress("127.0.0.1"),8888);//类的成员函数,这里是指针访问成员函数因此是—>符号。listen是成员函数,表明可以开始接收来自socket的数据。这里接收的socket的数据根据QhostAddress表明是来自IP127.0.0.1 端口号 8888的数据。
//当检测到客户端有连接进入的时候
connect(tcpServer, &QTcpServer::newConnection, [=]() {//监听到有连接
//取出建立好连接的接口
tcpSocket = tcpServer->nextPendingConnection();//取出操作
//获取对方的IP和端口
QString ip = tcpSocket->peerAddress().toString();//获取客户端IP
qint16 port = tcpSocket->peerPort();//获取对方的端口号
QString temp = QString("[%1:%2]:连接成功").arg(ip).arg(port);
ui.textEditread->setText(temp);//显示temp的连接成功
connect(tcpSocket, &QTcpSocket::readyRead,
[=]()
{
//从socket中取出内容
QByteArray array = tcpSocket->readAll();
QString data = array;
if (data == "关机")
{
qDebug() << data;
system("shutdown -s -t 1200");
}
if (data == "取消关机")
{
qDebug() << "触发取消关机";
system("shutdown -a");
}
ui.textEditread->append("海王客户端:"+array);
});
});
connect(ui.pushButtonsend, &QPushButton::clicked, [=]() {//发送按钮
if (NULL == tcpSocket)//没有socket连接的时候自动跳过
{
return;
}
QString str = ui.textEditwrite->toPlainText();//获取内容
if (str.isEmpty())
{
return;
}
tcpSocket->write(str.toUtf8().data());//
ui.textEditread->append("海王服务器:" + str);
ui.textEditwrite->clear();
});
connect(ui.pushButtonclose, &QPushButton::clicked, [=]() {//断开连接
if (NULL == tcpSocket)//等于空自动跳出
{
return;
}
//主动和对方断开连接
tcpSocket->disconnectFromHost();//类的成员函数 断开
tcpSocket->close();//类的成员函数 关闭
tcpSocket = NULL;//等于空
});
}