Qt初识 UDP通信

Udp通信  接收消息  我只监视本机哪个端口有没有数据就行了  
置于是哪个机器发过来的  我也不知道   但发送端要发送过来 对方必须知道我的IP和端口
应该可以通过分析发过来的包  把哪个Ip发过来的消息解出来  如果仅仅对数据感兴趣  那么就不用关系这个ip了
1  在.pro中加入 QT       += network

 

2   mainwindow.h 中加入  #include <QUdpSocket>  的头文件
 
3   加入两个 QUdpSocket  类  一个 *read  一个 udpsocket
QUdpSocket *read;
    QUdpSocket udpsocket;
 
4   添加发送按键 
   从网上找到的代码发送
 
void MainWindow::on_SendpushButton_clicked()
{
        QString ip_send=ui->IPlineEdit->text();
        quint16 port =ui->PortlineEdit->text().toInt();
 
        //获取文本框内容
        QString str=ui->SendtextEdit->toPlainText();
 
        //将消息发送给指定的IP
        udpsocket.writeDatagram(str.toUtf8(),QHostAddress(ip_send),port);
        //udpsocket.writeDatagram(str.toUtf8(),QHostAddress::LocalHost,45454);
        //内容   ip  port  发送
 
        //发送后清除
        ui->SendtextEdit->clear();
}
 
5   监听按钮的代码
void MainWindow::on_ListenpushButton_clicked()
{
    read=new QUdpSocket(this);
    quint16 port=ui->PortListenlineEdit_2->text().toInt();
    QString ip_listen=ui->IpListenlineEdit->text();
read->bind(QHostAddress(ip_listen),port,QUdpSocket::ShareAddress);
这句代码是监听不到其他电脑的
read->bind(port,QUdpSocket::ShareAddress)
这样就可以了  理解在最开始
    //read->bind(port,QUdpSocket::ShareAddress);
    //read->bind(ui->PortlineEdit->text().toInt(),QHostAddress(ui->IplineEdit->text()));   这句不行
    connect(read,SIGNAL(readyRead()),this,SLOT(readData()));
    ui->ListenpushButton->setEnabled(false);
}
 //监听QhosAddress(ip_listen) port
 
读取
void MainWindow::readData()
{
     while(read->hasPendingDatagrams())//拥有等待的数据报
     {
         QByteArray MyDate;//因为传送来的东西是未知的  用ByteArray
         MyDate.resize(read->pendingDatagramSize());         //MyDate数据大小取决于收到的数据
         read->readDatagram(MyDate.data(),MyDate.size());//读取数据  放到MyDate中
         QString str=ui->RecvtextEdit->toPlainText();
         str=tr(MyDate);
         ui->RecvtextEdit->append(str);
     }
}
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值