ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TCP/UDP---Qt

2022-03-02 16:29:59  阅读:184  来源: 互联网

标签:UDP Qt buffer void server --- ServerMainWindow ui socket


功能在widget工程里面实现
准备工作
在 .pro 文件里加上

QT += network

TCP

服务端

#include <QTcpServer>
#include <QTcpSocket>

1、定义监听socket和接收消息socket

    QTcpServer* server;
    QTcpSocket* socket;

2、在构造函数里进行初始化

	server = new QTcpServer();
    connect(server,&QTcpServer::newConnection,this,&ServerMainWindow::handleNewConnect);
    if(!server->listen(QHostAddress::Any,9966))
    {
        ui->labelRecvData->setText(server->errorString());
    }

3、添加发送消息和接收消息的函数

void ServerMainWindow::handleNewConnect()
{
    socket = server->nextPendingConnection();
    connect(socket,&QTcpSocket::readyRead,this,&ServerMainWindow::recvData);
    connect(socket,&QTcpSocket::disconnected,this,&ServerMainWindow::handleDisconnect);
}

void ServerMainWindow::recvData()
{
    QByteArray buffer;
    buffer = socket->readAll();
    if(!buffer.isEmpty())
    {
        ui->labelRecvData->setText(QString(buffer));
    }
}

void ServerMainWindow::handleDisconnect()
{
    ui->labelRecvData->setText("Client disconnected");
}

void ServerMainWindow::on_pushButtonSendData_clicked()
{
    QString qstrSend = ui->lineEditSendData->text();
    socket->write(qstrSend.toUtf8());
    socket->flush();
}

客户端

#include <QTcpSocket>

1、添加socket

    QTcpSocket* socket;

2、在构造函数里面初始化

	socket = new QTcpSocket();
    socket->connectToHost("10.30.16.254",9966);
    if(!socket->waitForConnected(3000))
    {
        qDebug()<<"Connect fail"<<endl;
    }
    else
    {
        socket->write("hello");
        socket->flush();
        connect(socket,&QTcpSocket::readyRead,this,&MainWindowClient::recvData);
    }

3、添加发送消息和接收消息函数

void MainWindowClient::recvData()
{
    QByteArray buffer;
    buffer = socket->readAll();
    if(!buffer.isEmpty())
    {
        ui->labelRecvData->setText(QString(buffer));
    }
}

void MainWindowClient::on_pushButtonSendData_clicked()
{
    QString qstrSendData = ui->textEditSendData->toPlainText();
    if(!qstrSendData.isEmpty())
    {
        socket->write(qstrSendData.toUtf8());
        socket->flush();
    }
}

UPD

对于UDP而言,不区分客户端和服务端,因为每个socket都既可以广播消息也可以接收消息

#include <QUdpSocket>

1、添加socket

    QUdpSocket* socket;

2、在构造函数里初始化

	socket = new QUdpSocket();
    socket->bind(8909,QUdpSocket::ShareAddress);
    connect(socket,&QUdpSocket::readyRead,this,&MainWindowUDPServer::recvData);

3、添加广播消息和发送消息函数

//读数据报
void MainWindowUDPServer::recvData()
{
    while(socket->hasPendingDatagrams())
    {
        QByteArray dataGrams;
        dataGrams.resize(socket->pendingDatagramSize());
        QHostAddress address;
        quint16 port;
        socket->readDatagram(dataGrams.data(),dataGrams.size(),&address,&port);
        qDebug()<<address<<port<<endl;

        QDataStream stream(dataGrams);
        QString qstrData1,qstrData2;
        stream>>qstrData1>>qstrData2;
        ui->labelRecvData->setText(qstrData1);
    }
}

void MainWindowUDPServer::on_pushButtonSendDataGram_clicked()
{
    QByteArray byteArray;
    QDataStream stream(&byteArray,QIODevice::WriteOnly);
    stream<<ui->textEditSendDataGram->toPlainText();
    socket->writeDatagram(byteArray,QHostAddress::Broadcast,8909);
}

觉得博客对你有帮助的话:
在这里插入图片描述

标签:UDP,Qt,buffer,void,server,---,ServerMainWindow,ui,socket
来源: https://blog.csdn.net/weixin_45714126/article/details/123231597

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有