ppt模板下载的网站有哪些,岳阳公司做网站,广州调查公司,交易链接该示例演示了在本地主机上的TCP客户端和服务器是如何通讯的。客户端 绑定信号槽。connect(tcpClient, QAbstractSocket::connected, this, Dialog::startTransfer); /* 连接到服务器时回送消息给服务器 */
connect(tcpClient, QIODevice::bytesWritte…该示例演示了在本地主机上的TCP客户端和服务器是如何通讯的。客户端 绑定信号槽。connect(tcpClient, QAbstractSocket::connected, this, Dialog::startTransfer); /* 连接到服务器时回送消息给服务器 */
connect(tcpClient, QIODevice::bytesWritten,this, Dialog::updateClientProgress); /* 绑定写数据到服务器的信号槽 */连接到服务器。tcpClient.connectToHost(QHostAddress::LocalHost, tcpServer.serverPort());这里比较有意思的是客户端连接到服务器-客户端(tcpClient)触发startTransfer槽函数-调用tcpClient.write-触发QIODevice::bytesWritten信号-触发updateClientProgress槽函数调用-就一直tcpClient.write直到if条件不成立后后停止发送。void Dialog::startTransfer()
{// called when the TCP client connected to the loopback serverbytesToWrite TotalBytes - int(tcpClient.write(QByteArray(PayloadSize, )));clientStatusLabel-setText(tr(Connected));
}
void Dialog::updateClientProgress(qint64 numBytes)
{// called when the TCP client has written some bytesbytesWritten int(numBytes);// only write more if not finished and when the Qt write buffer is below a certain size.if (bytesToWrite 0 tcpClient.bytesToWrite() 4 * PayloadSize) /* 直到if条件不成立后后停止发送 */bytesToWrite - tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), ));clientProgressBar-setMaximum(TotalBytes);clientProgressBar-setValue(bytesWritten);clientStatusLabel-setText(tr(Sent %1MB).arg(bytesWritten / (1024 * 1024)));
}
服务端 绑定信号槽用于新连接connect(tcpServer, QTcpServer::newConnection,this, Dialog::acceptConnection);监听客户端连接。!tcpServer.isListening() !tcpServer.listen()服务端新连接到来void Dialog::acceptConnection()
{tcpServerConnection tcpServer.nextPendingConnection();if (!tcpServerConnection) {serverStatusLabel-setText(tr(Error: got invalid pending connection!));return;}connect(tcpServerConnection, QIODevice::readyRead,this, Dialog::updateServerProgress); /* 接受客户端数据的槽函数 */connect(tcpServerConnection,QOverloadQAbstractSocket::SocketError::of(QAbstractSocket::error),this, Dialog::displayError); /* 错误反馈 */connect(tcpServerConnection, QTcpSocket::disconnected,tcpServerConnection, QTcpSocket::deleteLater); /* 断开反馈 */serverStatusLabel-setText(tr(Accepted connection));tcpServer.close();
}接收来自客户端的数据void Dialog::updateServerProgress()
{bytesReceived int(tcpServerConnection-bytesAvailable());tcpServerConnection-readAll(); /* 读数据 */serverProgressBar-setMaximum(TotalBytes);serverProgressBar-setValue(bytesReceived); /* 设置进度条 */serverStatusLabel-setText(tr(Received %1MB) /* 显示在界面上 */.arg(bytesReceived / (1024 * 1024)));if (bytesReceived TotalBytes) {tcpServerConnection-close();startButton-setEnabled(true);
#ifndef QT_NO_CURSORQApplication::restoreOverrideCursor();
#endif}
}
关于更多 在QtCreator软件可以找到或在以下Qt安装目录找到C:Qt{你的Qt版本}Examples{你的Qt版本}networkloopback相关链接https://doc.qt.io/qt-5/qtnetwork-loopback-example.htmlQt君公众号回复『Qt示例』获取更多内容。