手把手带你做一个自己的网络调试助手(1) - TCP服务器准备

程序设计流程图

TCP 服务器

ui界面搭建

Tcp服务器建立连接 - listen() + connect()

1.在构造函数中进行如下初始化:

通过 QNetworkInterface 类的  allAddresses 这一API 获得可用IP地址(包括IPv4 和 IPv6)

然后通过QHostAddress类的  protocol 这一API 进行筛选,只读取IPv4的数据

(QAbstractSocket::IPv4Protocol)

    server = new QTcpServer(this); // 初始化TcpServer对象

    //当有新的客户端接入时候建立连接:
    connect(server,SIGNAL(newConnection()),this,SLOT(on_NewClient_Connect()));
    // 设置控件状态 -> 没连接前不能断开连接
    ui->btnStopListen->setEnabled(false);
    ui->btnDisconnect->setEnabled(false);

    //  获取本机可用的ip
    //QList<QHostAddress> QNetworkInterface::allAddresses()
    QList<QHostAddress> addrs =QNetworkInterface::allAddresses();
    for(QHostAddress tmp:addrs){
     if(tmp.protocol() == QAbstractSocket::IPv4Protocol)  // 协议是IPV4协议才读取
        ui->comboBoxAddr->addItem(tmp.toString()); // 把读取到的ip地址添加到comboBox的框中
    }

 2.处理新的连接的槽函数

//处理新连接槽函数
void Widget::on_NewClient_Connect()
{
    //qDebug()<<"new Cline In";
    if(server->hasPendingConnections()){ //有新的连接接入
    QTcpSocket *connect = server->nextPendingConnection();//获取新的连接的信息
    qDebug()<<"Client Addr:"<<connect->peerAddress().toString()<<" host:"<<connect->peerPort();
    ui->textEditRev->insertPlainText("客户端地址:"+connect->peerAddress().toString()+
                                     "\n端口号:"+QString::number(connect->peerPort()));
    }

}

3.监听按钮槽函数

//监听按键槽函数
void Widget::on_btnListen_clicked()
{

    //QHostAddress addr("10.171.24.231"); // 构造合适类型的ip地址 -- 固定IP
    int port = ui->lineEditPort->text().toInt();
    //if(!server->listen(QHostAddress::Any,port)){ //Any -- 监听任意
     if(!server->listen(QHostAddress(ui->comboBoxAddr->currentText()),port)){ //根据combboBox选择的ip地址监听,QHostAddress(QString) -- 构造出合适对象
      qDebug()<<"listen error";
      return;
    }
      qDebug()<<"listen success";
    //监听成功,设置控件状态
    ui->btnListen->setEnabled(false);
    ui->btnStopListen->setEnabled(true);
    ui->btnDisconnect->setEnabled(true);

}

效果演示:

通过下图可以发现,我们已经成功建立连接并且获得了正确的IP地址和端口号

添加串口被占用弹窗提示

添加代码到监听槽函数

//监听按键槽函数
void Widget::on_btnListen_clicked()
{

    //QHostAddress addr("10.171.24.231"); // 构造合适类型的ip地址 -- 固定IP
    int port = ui->lineEditPort->text().toInt();
    //if(!server->listen(QHostAddress::Any,port)){ //Any -- 监听任意
     if(!server->listen(QHostAddress(ui->comboBoxAddr->currentText()),port)){ //根据combboBox选择的ip地址监听,QHostAddress(QString) -- 构造出合适对象
      qDebug()<<"listen error";
      QMessageBox msgBox;
      msgBox.setWindowTitle("监听失败");
      msgBox.setText("端口号被占用");
      msgBox.exec();
      return;
    }
      qDebug()<<"listen success";
    //监听成功,设置控件状态
    ui->btnListen->setEnabled(false);
    ui->btnStopListen->setEnabled(true);
    ui->btnDisconnect->setEnabled(true);

}

效果演示

Tcp服务器接收

添加信号与槽

在处理新连接槽函数中,添加读取消息的信号与槽

    //建立信号与槽来读取内容:
    connect(connection,SIGNAL(readyRead()),this,SLOT(on_readyRead_hanler()));

实现接收槽函数

//  读取数据的信号处理函数
void Widget::on_readyRead_hanler()
{
    //使用sender() --来获得信号额发出者 -- 局部变量
    QTcpSocket *tmpSock = qobject_cast<QTcpSocket *>(sender());
    QByteArray revData = tmpSock->readAll();
    ui->textEditRev->insertPlainText("客户端: "+revData);
}

效果演示

客户端断开检测

实现方法一 - disconnected

在建立新连接那建立信号连接

connect(connection,SIGNAL(disconnected()),this,SLOT(mdisconnected()));

实现断开检测槽函数

// 断开连接检测
void Widget::mdisconnected()
{
     QTcpSocket *tmpSock = qobject_cast<QTcpSocket *>(sender());
    //qDebug()<<"client  out!";
    ui->textEditRev->insertPlainText("客户端断开!");
    tmpSock->deleteLater(); //资源回收
}

方法二 - statechanged

同上建立信号连接

   connect(connection,SIGNAL(stateChanged(QAbstractSocket::SocketState)),
            this,SLOT(mstateChanged(QAbstractSocket::SocketState)));

实现断开检测槽函数

void Widget::mstateChanged(QAbstractSocket::SocketState socketState)
{
  qDebug()<<"client  out In state"<<socketState;
  switch (socketState) {
   case QAbstractSocket::UnconnectedState:
   //case QAbstractSocket::ClosingState:
       ui->textEditRev->insertPlainText("客户端断开!");
      break;


  }

实现效果:

串口调试助手是一种常用的工具,可以用于检验或验证串口设备的通讯功能。Python是一种免费的编程语言,可以用来写串口调试助手手把手教你如何使用Python写串口调试助手的步骤如下: 1. 安装Python环境:Python可以在官网下载,下载完成后点击安装即可。同时要安装pyserial库,使用pip install pyserial命令即可完成安装。 2. 导入pyserial库:为了能够使用串口功能,需要导入pyserial库。导入库的命令如下: import serial 3. 设置串口参数:在打开串口之前要设置串口的参数,如波特率、数据位、校验位、停止位等等。设置的命令如下: serial.Serial(“COMx”, buadrate, bytesize, parity, stopbits) 其中,COMx是串口号,baudrate是波特率,bytesize是数据位,parity是校验位,stopbits是停止位。 4. 打开串口:打开串口之后,可以使用串口进行数据的发送和接收。打开串口的命令如下: ser = serial.Serial() ser.port = “COMx” ser.open() 5. 读取串口数据:使用Python读取串口数据可以使用serial.Serial.readline()命令。 data = ser.readline() 6. 发送串口数据:使用Python发送串口数据可以使用serial.Serial.write()命令。 ser.write(“data”) 7. 关闭串口:使用完串口后,要及时关闭串口,释放资源。关闭串口的命令如下: ser.close() 上述为了Python写串口调试助手的基本步骤,详细及优化功能需要根据实际情况编写代码实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值