当前位置: 首页 > news >正文

杭州画廊网站建设公司名字大全3个字

杭州画廊网站建设,公司名字大全3个字,哪个平台查企业是免费的,网站的静态页面针对之前的服务器,如果子线程工作类里面需要使用socket发送消息,必须要使用信号与槽的方法, 先发送一个信号给父进程,父进程调用socket发送消息(原因是QT防止父子进程抢夺同一资源,因此直接规定父子进程不能…

        针对之前的服务器,如果子线程工作类里面需要使用socket发送消息,必须要使用信号与槽的方法, 先发送一个信号给父进程,父进程调用socket发送消息(原因是QT防止父子进程抢夺同一资源,因此直接规定父子进程不能使用同一资源,可能很片面,但至少针对socket这个类是这样的),因此,为了更好的使用多线程TCP服务器,下面介绍一种新的方法。

1、新建一个编译无错误的工程

2、在pro文件中加入network

3、新建两个类,一个Worker类继承QObject,一个TcpServer类继承QTcpServer

4、编辑服务器界面

5、给控件命名

6、查找本地有效的IPV4,并用combox控件显示

    QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();for (int i = 0; i < ipAddressesList.size(); ++i) {if (!ipAddressesList.at(i).isNull()//IP地址是否为NULL&& ipAddressesList.at(i).toIPv4Address() != 0//是否是IPV4地址){ui->IPComboBox->addItem(ipAddressesList.at(i).toString());}}

7、创建Server对象,绑定连接服务器按钮和创建代码

#include "tcpserver.h"
TcpServer *tcpserver = NULL;//TcpServer这个是自定义的服务器类void Widget::on_connectPushButton_clicked()
{if(ui->connectPushButton->text().contains("打开服务器")){tcpserver = new TcpServer();           //实例化tcpserver对象tcpserver->listen( QHostAddress(ui->IPComboBox->currentText()),ui->portLineEdit->text().toInt());//进行IP地址与端口的监听ui->connectPushButton->setText("断开服务器");}else{tcpserver->close();ui->connectPushButton->setText("打开服务器");}
}

8、当客户端被连接时,TcpServer类会自己调用incomingConnection方法,然后我们需要重写这个方法,首先就是新建一个工作类,然后把套接字文件符传送过去,然后在构造函数初始化套接字

protected:void incomingConnection(qintptr socketDescriptor) override; //当客户端连接时被调用。
void TcpServer::incomingConnection(qintptr socketDescriptor)
{QThread *thread = new QThread();Worker *worker = new Worker(socketDescriptor);//socketDescriptor这个参数时套接字的描述符,用于生成套接字socketconnect(thread, &QThread::finished, thread, &QThread::deleteLater); //释放线程资源worker->moveToThread(thread);thread->start();
}

 9、先修改工作类worker的构造函数,将套接字描述符加入

public:explicit Worker(qintptr socketDescriptor,QObject *parent = nullptr);Worker::Worker(qintptr socketDescriptor, QObject *parent): QObject{parent}
{m_socketDescriptor=socketDescriptor;m_tcpsocket = new QTcpSocket(this);m_tcpsocket->setSocketDescriptor(m_socketDescriptor);
}

10、获取套接字之后开始处理读到的数据,在工作类中建立读信号和槽函数关系

public slots:void onReadyRead();connect(m_tcpsocket,&QTcpSocket::readyRead,this,&Worker::onReadyRead);void Worker::onReadyRead()
{QByteArray data = m_tcpsocket->readAll();m_tcpsocket->write("receive : "+data);
}

12、编译通过,且连接成功,可以将收到的消息发给服务器

 13、开始处理发送信息的消息,首先Widget界面有一个发送按钮,用于发送数据给客户端,代码实际操作时发送信号给工作类处理

signals:void sendDataSignals(QString data);void Widget::on_sendPushButton_clicked()
{emit sendDataSignals(ui->sendPlainTextEdit->toPlainText());
}

我们如何让Widget和worker工作类产生联系,利用中间类TcpServer,我们先将sendDataSignals信号发送到TcpServer类中,利用connect信号转信号,然后等待TcpServer发送 sendDataSignals信号时绑定Worker类的槽函数进行发送数据

connect(this,&Widget::sendDataSignals,tcpserver,&TcpServer::sendDataSignals);
connect(this,&TcpServer::sendDataSignals,worker,&Worker::sendData_slots);
void Worker::sendData_slots(QString data)
{m_tcpsocket->write("send : "+data.toUtf8()+"\r\n");
}

 14、编译代码,运行成功,可以成功收发数据

15、当接收到数据后我们让其在网络数据接收窗口显示,采用信号与槽的机制

void Worker::onReadyRead()
{QByteArray data = m_tcpsocket->readAll();m_tcpsocket->write("i am server,receive : "+data+"\r\n");emit readDisplaySignals(QString::fromUtf8(data));
}
connect(worker,&Worker::readDisplaySignals,this,&TcpServer::readDisplaySignals);
connect(tcpserver,&TcpServer::readDisplaySignals,this,&Widget::readDataDisplay_slots);
void Widget::readDataDisplay_slots(QString data)
{QString str=ui->receivePlainTextEdit->toPlainText();//接收区之前的内容QDateTime nowtime = QDateTime::currentDateTime();str += "[" + nowtime.toString("yyyy-MM-dd hh:mm:ss") + "] "+ "RX: ";//记录当前时间str = str + data + "\r\n";//当前接收最新消息ui->receivePlainTextEdit->setPlainText(str);
}

16、测试成功

17、完整工程代码

链接:https://pan.baidu.com/s/1wqfFoLKSrARjDHIX0Y-diQ?
提取码:生日

http://www.yayakq.cn/news/697628/

相关文章:

  • 无锡网站建设报价wordpress 猫
  • 如何判断网站是否被k三网合一网站远吗
  • 怎么做 在线电影网站seo网络营销推广公司
  • 广州seo网站推广平台虚拟产品网站
  • 美术馆网站建设方案html网站尾部怎么做
  • 网站做关键词贵州有网站的企业
  • 中交建设集团网站分公司北京新增死亡病例详情
  • 中小企业网站制作塞尼铁克wordpress gstatic
  • 网站空间的后台控制面板学编程课对孩子有什么好处
  • 网站开发的客户群体中国宁波网站
  • 网站三要素关键词 描述怎么做网站宣传的方法主要有
  • 网站建设收费流程小企业财务软件免费版
  • 网站制作软件排行榜aso优化违法吗
  • 响应式网站公司做网站需要自备服务器吗
  • seo网站推广杭州网站的推广方式
  • 网站建设-设计可以直接进入网站的正能量照片
  • 伍佰亿网站怎样好听有创意的广告公司名字
  • 郑州网站竞价托管做外贸国外网站
  • 做公司网站要素宝山网站建设制作
  • 河北省城乡和建设厅网站首页威海建设集团信息网站
  • 豆各庄网站建设安全培训网站
  • 怎么申请免费的网站小型网吧网络设计方案
  • 如何建立自己的个人网站电子商务网站开发怎么设计
  • 附近广告牌制作电话江门seo外包服务
  • 国外做的比较好的网站高新区免费网站建设
  • 垂直型电商网站如何做宁波seo哪家好快速推广
  • 杭州市区网站制作单位微网站与微信的关系
  • 如何选择合肥网站建设网站开发环境构建
  • 电子商务网站创建过程广州市绿色建筑信息平台
  • 无锡新吴区住房建设交通局网站嵌入式开发方向