QT客户端及服务器端的连接及数据发送

结果视图(本机IP地址用*掩盖了):

一,定义

服务器端:
    myServer =new QTcpServer(this);

客户端:
    myClient = new QTcpSocket(this);

二,得到本机的ip地址

    QList<QHostAddress> addrs = QNetworkInterface::allAddresses();     //定义
    for(int i=0;i<addrs.length();i++)
    {
        QHostAddress addr=addrs.at(i);
        qDebug()<<addr.toString();                    //显示出所有ip地址
        if(addr.toString().contains("192."))
        {
            myAddr=addr.toString();                   //将192开头的ip赋值给myAddr
            break;
        }
    }

三,获取ip地址以及端口号,然后连接

ip地址和端口号直接手动从lineEdit获得(服务器和客户端一样)


    myAddr =ui->lineEdit_1->text();
    QString myPort = ui->lineEdit_2->text();

连接方法:

服务器端:
    myServer->listen(QHostAddress(myAddr), myPort.toUInt());

客户端:
    myClient->connectToHost(QHostAddress(servIP),servPort.toUInt());

四,服务器端或客户端读取对方内容

服务器端读取:
    QTcpSocket *client = (QTcpSocket*)this->sender();
    QString str1=QString("客户端[%1:%2] 说:")
            .arg(client->peerAddress().toString())
            .arg(client->peerPort());
    QString msg1;
    QString msg2;
    while(!client->atEnd())
    {
        msg1.append(QString(client->readAll()));
        //QString str=QString(client->readAll());
        //msg=QString("%1%2").arg(str1).arg(str2);
        //ui->textEdit->append(msg);
    }
    msg2=QString("%1%2").arg(str1).arg(msg1);
    ui->textEdit->append(msg2);

客户端读取:
    QString msg;
    QString str1,str2;
    str1=QString("服务器[%1:%2] 说:").arg(myClient->peerAddress().toString()).arg(myClient->peerPort());
    while(!myClient->atEnd())
    {
        str2.append(QString(myClient->readAll()));
    }
    msg=QString("%1%2").arg(str1).arg(str2);               
    ui->textEdit->append(msg);

五,服务器端或客户端向对方发送

服务器端:

    QString ip=ui->lineEdit_3->text();
    QString port=ui->lineEdit_4->text();                                  //获取客户端的ip和端口号
    for(int i=0;i<Array.length();i++)
    {
        if(Array.at(i)->peerAddress().toString() ==ip)
        {
            if(Array.at(i)->peerPort()== port.toUInt())                         //找到对应客户端的ip和端口号,然后发送
            {
                QString msg=ui->textEdit_2->toPlainText();
                Array.at(i)->write(msg.toUtf8());                           // toUtf8支持发送汉字
                ui->textEdit_2->clear();                                     //数据发送后清空
                break;
            }
        }
    }

客户端:
    QString msg=ui->textEdit_2->toPlainText();
    int ret=myClient->write(msg.toUtf8());                // toUtf8支持发送汉字
    if(ret<=0)
      return;
       ui->textEdit_2->clear();                                 //数据发送后清空

六,断开

服务器端:
    QTcpSocket *client=(QTcpSocket *)this->sender();
    QString msg=QString("客户端[%1:%2] 退出!")
            .arg(client->peerAddress().toString())
            .arg(client->peerPort());
    ui->textEdit->append(msg);
    //删除对应客户端
    for(int i=0;i<Array.length();i++)
    {
        if(Array.at(i)->peerAddress()==client->peerAddress())
        {
            if(Array.at(i)->peerPort()== client->peerPort())
            {
                Array.removeAt(i);
                break;
            }
        }
    }
    ui->pushButtonLink->setEnabled(true);               //断开后,键恢复使用

客户端:
    QString msg="服务器退出";
    ui->textEdit->append(msg);
    ui->pushButtonLink->setEnabled(true);               //断开后,键恢复使用

七,将按钮禁用和解开

    ui->pushButtonLink->setEnabled(false);               //禁用

    ui->pushButtonLink->setEnabled(true);              //解开

 八,服务器端和客户端的资源链接

https://download.csdn.net/download/qq_46423166/12363175

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt是一个跨平台的开发框架,可以用于开发服务器端客户端应用程序。要实现Qt服务器端客户端发送数据,可以采用TCP/IP协议进行通信。 在服务器端,可以使用QTcpServer类来创建一个TCP服务器。首先,需要创建一个QTcpServer对象并进行绑定监听。在有客户端连接时,通过QTcpServer的newConnection()信号来处理连接请求。一旦连接建立,服务器端就会创建一个QTcpSocket对象用于与客户端进行通信。 在服务器端客户端发送数据,可以使用QTcpSocket的write()函数。可以将要发送数据作为参数传递给write()函数,然后通过调用flush()函数将数据立即发送出去。服务器端可以通过与客户端建立的QTcpSocket对象来调用这些函数,发送相关的数据。 在客户端,首先需要创建一个QTcpSocket对象用于连接服务器端。使用connectToHost()函数将客户端服务器端进行连接连接成功后,可以通过QTcpSocket的readyRead()信号来接收服务器端发送数据。 收到服务器端发送数据后,客户端可以通过QTcpSocket的readAll()函数来获取完整的数据。然后可以对数据进行处理,显示或者进行其他操作。 最后,在服务器端客户端的通信完成后,需要断开连接。可以调用QTcpSocket的disconnectFromHost()函数来关闭与客户端连接,同时还需调用QTcpServer的close()函数来停止监听。 综上所述,Qt服务器端客户端发送数据的过程包括:创建和监听服务器端,处理客户端连接请求,发送数据客户端客户端接收数据,并处理数据,最后断开连接。通过上述步骤可以实现Qt服务器端客户端发送数据的功能。 ### 回答2: Qt是一个跨平台的应用程序开发框架,提供了丰富的功能和类来帮助开发者快速、高效地构建应用程序。在Qt中,服务器端客户端发送数据可以通过以下几个步骤实现: 1. 创建和初始化一个QTcpServer对象,用于监听客户端连接。 2. 在服务器端,通过调用QTcpServer对象的listen()函数开始监听指定的IP地址和端口号。这将使服务器端处于等待连接状态。 3. 在连接建立时,服务器端QTcpServer对象会发射newConnection()信号,我们可以连接这个信号到一个槽函数中,以便在客户端连接时执行特定的操作。 4. 在槽函数中,可以通过调用QTcpServer对象的nextPendingConnection()函数来获取一个QTcpSocket对象,用于和客户端进行通信。 5. 通过QTcpSocket对象的write()函数向客户端发送数据。这个函数接受一个字节数组作为参数,将数据发送客户端。 6. 如果需要保证数据完整性和稳定性,可以调用QTcpSocket对象的waitForBytesWritten()函数来等待数据发送完成。 以上就是通过Qt实现服务器端客户端发送数据的基本步骤。在实际开发中还可以根据需求进行相应的拓展和优化,例如使用信号和槽机制来实现异步通信、使用多线程来处理客户端连接等。 ### 回答3: Qt是一种跨平台的应用程序框架,它不仅可以用于移动设备和桌面应用程序的开发,还可以用于服务器端的开发。在Qt服务器端客户端发送数据时,可以通过以下步骤来实现: 1. 创建一个QTcpServer对象,用于监听客户端连接请求。可以使用QTcpServer类提供的listen()函数来指定监听的端口。 2. 在QTcpServer的incomingConnection()槽函数中接收连接请求并创建一个QTcpSocket对象。可以使用QTcpServer类提供的nextPendingConnection()函数获取到客户端的套接字。 3. 在服务器端准备好要发送数据。可以使用QByteArray类来保存数据,也可以使用QString类将数据转换为字符串。 4. 调用QTcpSocket类提供的write()函数将数据发送客户端。可以将要发送数据作为write()函数的参数传入。 5. 在发送数据后,可以调用QTcpSocket类提供的flush()函数来确保数据已经全部发送出去。 6. 如果需要,可以关闭服务器与客户端之间的连接。可以调用QTcpSocket类提供的disconnectFromHost()函数来关闭客户端的套接字。 以上就是一个简单的Qt服务器端客户端发送数据的过程。在实际的开发中,还可以根据具体的需求进行进一步的处理,如处理连接错误、处理客户端的请求等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值