QT的TCP通信

QT的TCP Socket通信仍然有服务端、客户端之分。服务端通过监听某个端口来监听是否有客户端连接到来,如果有连接到来,则建立新的SOCKET连接;客户端通过IP和PORT连接服务端,当成功建立连接之后,就可进行数据的收发了。需要注意的是,在QT中,QT把SOCKET当成输入输出流来对待的,数据的收发是通过read()和write()来进行的。

服务器:
1.创建QTcpServer对象
2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号)
3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket)
4.QTcpsocket发送数据用成员方法write,
5.读数据当客户端有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据

客户端 :
1.创建QTcpSocket对象
2.链接服务器connectToHost(QHostAddress(“ip”),端口号)
3.QTcpsocket发送数据用成员方法write,
4.读数据当对方有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据

在这里插入图片描述

服务器程序步骤:

//监听套接字
tcpServer = new QTcpServer(this);
//监听
tcpServer->listen(QHostAddress::Any,8888);

//如果客户端成功和服务器连接
//tcpServer会自动触发newConnection
connect(tcpServer,&QTcpServer::newConnection,
[=]()
{
	//取出建立好的套接字
	tcpSocket=tcpServer->nextPendingConnection();
	//获取对方的IP和端口
	QString ip = tcpSocket->peerAddress().toString();
	qint16 port = tcpSocket->peerPort();
	QString str = QString("[%1:%2] 成功连接").arg(ip).arg(port);
	ui.textEdit->setText(str);//显示到编辑区
}
);

发送:

void widget::on_sendStrPushButton_clicked() {

	QString str = ui.textEdit->toPlainText();
	QByteArray buf = str.toUtf8().data();
	tcpSocket->write(buf);
}

客户端程序步骤:

tcpSocket = new QTcpSocket(this);

connect(tcpSocket, &QTcpSocket::readyRead, this, &clientWidget::receiveData);

与服务端建立连接:

void clientWidget::buttonConnect()
{
	//获取服务器的IP和端口
	QString ip = ui.lineEditIP->text(); 
	quint16 port = ui.lineEditPort->text().toInt();
	tcpSocket->connectToHost(QHostAddress(ip),port);
}

接受服务端发送的信息:

void clientWidget::receiveData() {
	//取出接收的内容
	QByteArray buf = tcpSocket->readAll();
	if (!buf.isNull())
	{
		ui.textEdit->setText(buf.data());
	}
}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值