今天学习了TCP通信,相比LINUX网络编程,Qt通信非常简单.
先上Qt Tcp通信的小菜,他们的结构.
是吧,他们的结构非常简单.当然这张图也是"盗"的.再次说明我博客很多东西都是各位路过大牛使用过的,仅仅是想让自己忘记的时候能想起来,让我和一样刚学习这块的参考.
不多说了,结构看明白后,自然是上代码:
服务端:
1:创建 监听.
tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress::Any, 8000);server connect success,will trigger " newConnection" signal.
connect(tcpServer, &QTcpServer::newConnection,
[=]()
{
tcpsocket = tcpServer->nextPendingConnection();
QString IP = tcpsocket->peerAddress().toString();//得到IP地址
qint16 port = tcpsocket->peerPort();//得到端口
QString temp = QString("[%1:%2]:success connect").arg(IP).arg(port);
ui->RecvTextEdit->setText(temp);//将基本信息打印出来.
//下面这部分是:当有数据发送过来时,读取数据显示.<通信部分>
connect(tcpsocket, &QTcpSocket::readyRead,
[=]()
{
QByteArray array = tcpsocket->readAll();
ui->RecvTextEdit->append(array);
}
);
}
);
服务端发送部分:
QString str = ui->SendTextEdit->toPlainText();
tcpsocket->write(str.toUtf8().data());
关闭端口:
tcpsocket->disconnectFromHost();tcpsocket->close();
好了,上面就是服务端的基本设置,下面开始客户端.
首先创建socke,建立连接:
QString str = ui->IpAddressLineEdit->text();qint16 port = ui->PortLineEdit->text().toInt();tcpsocket->connectToHost(QHostAddress(str), port);
当连接成功时,会触发connect信号.
tcpsocket = new QTcpSocket(this);connect(tcpsocket, &QTcpSocket::connected,[=]()
{
ui->RecvTextEdit->setText("success create connect\n");}
);
发送部分:
QString str = ui->SendTextEdit->toPlainText();tcpsocket->write(str.toUtf8().data());
接收部分:
connect(tcpsocket, &QTcpSocket::readyRead,[=]()
{
QString str = tcpsocket->readAll();ui->RecvTextEdit->append(str);}
);
关闭端口:
tcpsocket->disconnectFromHost();tcpsocket->close();
是不是很简单,是这个栗子太渣而已.^ _ ^