Qt 服务器 获取发送客户端的QTcpSocket对象 和 该socket的ip和端口号

这篇具有很好参考价值的文章主要介绍了Qt 服务器 获取发送客户端的QTcpSocket对象 和 该socket的ip和端口号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遇到问题:

        众多客户端发送过来请求数据,如何找到该客户端的 QTcpsocket对象给该对象回复消息?

解决办法:

        QTcpSocket *ptr =   dynamic_cast<QTcpSocket *>(sender());

        解释:通过 dynamic_cast强行转换。QTcpSocket *类型的对象、谁发送了信号就会触发

                   sender()信号、获取该信号的QTcpsocket *对象。

        下面代码可以获取socket的port和ip

    //监听套接字
    tcpServer=new QTcpServer(this);

    //监听
    tcpServer->listen(QHostAddress::Any,8888);

    connect(tcpServer,&QTcpServer::newConnection,
            [=](){
                    //取出建立好连接的套接字
                    tcpSocket=tcpServer->nextPendingConnection();

                    //获取对方的IP和端口
                    QString ip=tcpSocket->peerAddress().toString();
                    qint16 port =tcpSocket->peerPort();
                    QString ipDate=QString("[ip=%1 port=%2] 建立好连接了!!").arg(ip).arg(port);

                    ui->textEdit->append(ipDate);
                    ui->buttonFile->setEnabled(true);
                }

            );

完整代码如下

        文章来源地址https://www.toymoban.com/news/detail-531534.html

#include "server_code.h"

Server_code::Server_code(QObject *parent)
{
    socket_num =0;
    listen(QHostAddress::Any,8888);
    connect_db();
    qDebug()<<"服务器端口号已经开启: 8888";
}

void Server_code::connect_db()
{
    //创建连接对象
    db = QSqlDatabase::addDatabase("QMYSQL");
    //连接参数

    db.setPort(3306);
//    db.setHostName("47.105.188.189");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("voice");
    db.setUserName("root");
    db.setPassword("123456");

    //如果连接成功
    if (db.open())
    {
        qDebug()<<"连接成功";

        //查询  通过全局指针变量query指向连接成功的地址。
        query = new QSqlQuery();

    }
    else
    {
         qDebug()<<"连接失败";

    }
}

void Server_code::incomingConnection(qintptr socketDescriptor)
/*产生链接的时候执行这个     这个是产生socket的函数*/
{
    //生成tcpSocket对象
    socket = new QTcpSocket(this);



    //绑定这个链接来的兑现到socket中
    socket->setSocketDescriptor(socketDescriptor);


    only_socket.insert(socket_num,socket);

    //第一次连接发送 所有型号数据给客户端
    model();

    //读取他发来的消息、 使用receiveMessage去接收
    connect(socket,SIGNAL(readyRead()),this,SLOT(receiveMessage()));

    //传递数据 谁上线了
//    emit giveMsg(socket->peerAddress().toString() + "上线",2);
    qDebug()<<socket->peerAddress().toString() + "上线";
    socket_num++;

}



void Server_code::receiveMessage()
{

    QTcpSocket* ptr  =dynamic_cast<QTcpSocket*>(sender());

    //读取 字节流的方式  读取客户端发来的数据。
    QByteArray arr = ptr->readAll();
    QString str = arr.data();
    qDebug()<<str;
    //把信号传递出去  其中1代表客户端机型、 后期要加用户名和密码在这里添加。
    emit giveMsg(str,1,ptr);

}

void Server_code::model()
{
    //连接的时候、显示在客户端的型号数据

    query->exec("select 型号 from FRP_attr");
    QString model;
    while(query->next())
    {
         model = model + query->value(0).toString() + ",";
    };

    model = model + "型号";
    QByteArray send_model = model.toUtf8();
    socket->write(send_model);
}




//测试声音系数
void Server_code::model_voice(QString one_model,QTcpSocket* ptr){

    query->exec("select 测试吸声系数 from 型号吸声系数表 where 型号 = '"+one_model+"' and 频率 < 5001");
    QString test_voice;
    while(query->next())
    {
         test_voice = test_voice + query->value(0).toString() + ",";
    };

    test_voice = test_voice + "$$$";

//    qDebug()<<test_voice;

    QByteArray test_voice_lot = test_voice.toUtf8();
    ptr->write(test_voice_lot);
}


//测试物理/声学系数
void Server_code::model_detail_data(QString one_model,QTcpSocket* ptr){

    query->exec("select * from frp_attr where 型号 = '"+one_model+"'");
    QString model_info_data;
    while(query->next())
    {
         model_info_data = model_info_data + query->value(0).toString() + ",";
         model_info_data = model_info_data + query->value(1).toString() + ",";
         model_info_data = model_info_data + query->value(2).toString() + ",";
         model_info_data = model_info_data + query->value(3).toString() + ",";
         model_info_data = model_info_data + query->value(4).toString() + ",";
         model_info_data = model_info_data + query->value(5).toString() + ",";
         model_info_data = model_info_data + query->value(6).toString() + ",";
         model_info_data = model_info_data + query->value(7).toString() + ",";
         model_info_data = model_info_data + query->value(8).toString() + ",";
         model_info_data = model_info_data + query->value(9).toString() + ",";
         model_info_data = model_info_data + query->value(10).toString() + ",";
         model_info_data = model_info_data + query->value(11).toString() + "|";
    };
    model_info_data = model_info_data + "$$$";
    QByteArray model_info_data_lot = model_info_data.toUtf8();
    ptr->write(model_info_data_lot);
}

//理论系数
void Server_code::li_model_voice(QString one_model,QTcpSocket* ptr){

    query->exec("select `理论吸声系数` from 型号吸声系数表 where 型号 = '"+one_model+"'and 频率 < 5001");
    QString li_voice;
    while(query->next())
    {
         li_voice = li_voice + query->value(0).toString() + ",";
    };
//    li_voice = li_voice + "理论吸声系数";
    QByteArray li_voice_lot = li_voice.toUtf8();
    ptr->write(li_voice_lot);
}


到了这里,关于Qt 服务器 获取发送客户端的QTcpSocket对象 和 该socket的ip和端口号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP通信之QTcpServer和QTcpSocket,服务器和客户端通讯

    TCP传输控制协议 是一个可靠的(相对于UDP),面向流,面向连接的运输协议。 Socket 俗称“套接字”。就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地

    2024年02月12日
    浏览(67)
  • TCP的服务器和客户端的通信

    实现不同主机之间的进程间通信(服务器和客户端的通信),并且一个服务器可以处理很多个客户端的请求。 协议:通信双方所遵守的通信规则。 网络体系结构:指网络的层次结构和每层所使用的协议的集合。 网络采用分而治之的方法设计,将网络的功能划分为不同的模块

    2023年04月23日
    浏览(41)
  • UDP服务器和客户端的创建步骤

    一、创建用户数据报套接字(socket函数): 通信域选择 IPV4网络协议 、套接字类型选择 数据报式 ; 二、填充服务器的网络信息结构体: 1.定义网络信息结构体变量; 2.求出结构体变量的内存空间大小; 3.结构体清零; 4.使用IPV4网络协议; 5.预留给在终端输入的网络字节序

    2024年01月19日
    浏览(42)
  • TCP服务器和客户端的创建步骤

    一、创建套接字(socket函数): 通信域选择IPV4网络协议、套接字类型选择流式; 二、填充服务器的网络信息结构体: 1.定义网络信息结构体变量; 2.求出结构体变量的内存空间大小; 3.结构体清零; 4.使用IPV4网络协议; 5.预留给在终端输入的网络字节序的端口号; 6.预留给

    2024年01月17日
    浏览(41)
  • 【JavaEE初阶】 TCP服务器与客户端的搭建

    TCP服务器与客户端的搭建需要借助以下API TCP之间通信通过流进行传输,无论是服务器还是客户端:读取内容用输入流,写入内容用输出流 ServerSocket 是创建TCP服务端Socket的API。 ServerSocket 构造方法 : 方法签名 方法说明 ServerSocket(int port) 创建一个服务端流套接字Socket,并绑定

    2024年02月05日
    浏览(41)
  • nodejs 实现MQTT协议的服务器端和客户端的双向交互

    公司和第三方合作开发一个传感器项目,想要通过电脑或者手机去控制项目现场的传感器控制情况。现在的最大问题在于,现场的边缘终端设备接入的公网方式是无线接入,无法获取固定IP,所以常规的HTTP协议通信就没法做,现在打算使用MQTT来实现云平台和边缘终端(传感器

    2024年02月05日
    浏览(68)
  • 在Linux系统实现服务器端和客户端的套接字通信

    目录 一.创建一个socket文件夹用来存放编写的服务器端和客户端程序 二.编写服务器端代码 三.编写客户端代码 四.编译c语言程序 五.断开连接 六.可能涉及到的一些没接触过的知识点 (我系统里的文件在temp/socket$文件夹中)   在server.c中编写的代码: 在client中编写的代码:

    2024年02月07日
    浏览(35)
  • 【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务

    这篇文章,主要介绍如何通过Nginx服务器转发客户端的WebSocket接口到后端服务【知识星球】。 目录 一、Nginx配置WebSocket 1.1、Nginx配置内容 1.2、客户端请求地址 1.3、创建WebSocket测试工程 1.4、启动测试 1.5、WebSocket超时问题 1.5.1、设置超时时间 1.5.2、建立心跳机制(推荐) 今天

    2024年04月11日
    浏览(48)
  • 【计算机网络】网络编程套接字&UDP服务器客户端的简单模拟

    需要云服务器等云产品来学习Linux的同学可以移步/–腾讯云–/官网,轻量型云服务器低至112元/年,优惠多多。(联系我有折扣哦) 每台主机都有自己的IP地址,当数据在进行通信的时候,除了要发送的数据外,在报头里面还要包含发送方的IP和接收方的IP,这里发送方的IP就

    2024年02月20日
    浏览(64)
  • FRP内网穿透参数配置+服务器与客户端的简易配置+完整配置详解(Windows)

    有设备A,想访问处于局域网的设备C时,可以通过处在公网的设备B进行转发 前提条件:一个有公网IP的电脑,云服务器、有公网IPV4/6的设备均可,如果使用ipv6模式,那么设备BC都必须支持ipv6才行,ipv6地址除了bind_addr和server_addr,都要用[]括起来 本文基于:v0.48.0版本 官网: 官

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包