CMAKE添加network支持
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network) #寻找network包
target_link_libraries(TCPServer PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network #添加network支持
)
Client端
连接函数
void MainWindow::on_pBt_connect_clicked()
{
if(ui->pBt_connect->text() == tr("连接服务器")){
QString ip = ui->lineEdit_IP->text();
int port = ui->lineEdit_PORT->text().toInt();
socket->abort();//取消已有连接
socket->connectToHost(ip, port);
bool isconnected = socket->waitForConnected();
if(isconnected){
ui->textEdit_display->append("连接服务器成功");
ui->pBt_connect->setEnabled(true);
ui->pBt_connect->setText("断开连接");
connect(socket,&QTcpSocket::readyRead,this,&MainWindow::ReadData);
}
else
ui->textEdit_display->append("连接失败");
}
else{
ui->pBt_connect->setText("连接服务器");
ui->pBt_connect->setEnabled(false);
socket->disconnectFromHost();
}
}
server端
监听端口
void MainWindow::on_pBt_listen_clicked()
{
if(ui->pBt_listen->text() == tr("监听")){
int port = ui->lineEdit_PORT->text().toInt();
if(!server->listen(QHostAddress::Any,port)){
qDebug() << server->errorString();
return;
}
else
ui->pBt_listen->setText("取消监听");
}
else
{
socket->abort();
server->close();
ui->pBt_listen->setText("监听");
}
}
连接客户端
void MainWindow::ConnectClient()
{
//获取客户端连接
while (server->hasPendingConnections()){
socket = server->nextPendingConnection();//获取连接的socket
QString str = QString("%1:%2").arg(socket->peerAddress().toString()).arg(socket->peerPort());
ui->textEdit_display->append(str+"连接成功");
ui->comboBox_client->addItem(str);
ui->comboBox_client->setItemData(ui->comboBox_client->count()-1,socket->socketDescriptor());//保存socket描述符
connect(socket,&QTcpSocket::readyRead,this,&MainWindow::ReadData);//接收数据
}
}
完整代码地址:https://github.com/ggstar00/QtTcpDemo/