QT 网络编程二(UDP版本)

QT的UdpSocket接收消息使用原则
第一步:new一个UdpSocket
第二步:调用UdpSocket的bind方法,同时指定端口号
第三步:使用connect将接收消息函数和UdpSocket对象做关联
第四步:在接受消息槽函数当中调用readDatagram接收消息

 

接收消息
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
    void mydatasend();
private:
    QUdpSocket *udpsocket;
private slots:
    void mydatarecv();
};

#endif // WIDGET_H
#include "widget.h"
#include <QHostAddress>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    udpsocket=new QUdpSocket(this);
    /*指定绑定端口号,接收消息必须绑定端口号,发送消息则不需要绑定*/
    udpsocket->bind(8080);
  /*取消绑定端口号使用:udpsocket->close()方法*/
/*readyRead()表示有消息到来这个信号*/ connect(udpsocket,SIGNAL(readyRead()),this,SLOT(mydatarecv())); } void Widget::mydatarecv() { char buf[1024]={0}; /*判断是否有消息*/ while(udpsocket->hasPendingDatagrams()) { udpsocket->readDatagram(buf,sizeof(buf)); QMessageBox::information(this,"消息",buf); memset(buf,0,sizeof(buf)); } } void Widget::mydatasend() { // } Widget::~Widget() { }

 

发送消息
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    QUdpSocket *udpsocket;
    QPushButton *btn1;
    QLineEdit *edit1;
    QLineEdit *edit2;
    QLabel *label1;
    void mysenddata();
private slots:
    void btn_click();
};

#endif // WIDGET_H
#include "widget.h"
#include <QHostAddress>
#include <QGridLayout>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    udpsocket=new QUdpSocket(this);
    btn1=new QPushButton(tr("点击"));
    edit1=new QLineEdit();
    edit2=new QLineEdit();
    label1=new QLabel(tr("目标IP"));
    QGridLayout *lay1=new QGridLayout(this);
    lay1->addWidget(btn1,1,1);
    lay1->addWidget(edit1,1,0);
    lay1->addWidget(edit2,0,1);
    lay1->addWidget(label1,0,0);
    connect(btn1,SIGNAL(clicked()),this,SLOT(btn_click()));
}

Widget::~Widget()
{

}

void Widget::btn_click()
{
    mysenddata();
}

void Widget::mysenddata()
{
    QString stext=edit1->text();
    QHostAddress *serverip=new QHostAddress();
    //获取目标IP地址
    QString ipstr=edit2->text();
    if(ipstr.isEmpty())
    {
        QMessageBox::critical(this,"错误信息","ip地址不可以为空!");
        return;
    }
    serverip->setAddress(ipstr);
    char buf[1024]={0};
    strncpy(buf,stext.toStdString().data(),sizeof(buf));
    udpsocket->writeDatagram(buf,strlen(buf),*serverip,8080);
    delete serverip;
    edit1->clear();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值