20201222关于C++QT服务器和客户端的简单应用

关于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;//等于空
		});
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值