找回密码
 立即注册
收起左侧

能发送数据报,却接收不到(udp)

0
回复
4575
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2015-1-7 15:06:04 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用writeDatagram()发送一个数据报给485模块,485模块收到后将对应传感器的信息(9字节的16进制)返回。现在的问题是,成功发送数据报,可是却接收不到。代码如下:
  1. #include<QNetworkInterface>
  2. #include<QMessageBox>
  3. #include<QHostInfo>
  4. #include"networkinformation.h"


  5. NetworkInformation::NetworkInformation(QWidget *parent)
  6.         :QWidget(parent)
  7. {
  8.         hostLabel=new QLabel(tr("tem:"));
  9.         LineEditLocalHostName=new QLineEdit;
  10.         ipLabel=new QLabel(tr("hum:"));
  11.         LineEditAddress=new QLineEdit;

  12.         detailBtn=new QPushButton(tr("send"));

  13.         mainLayout=new QGridLayout(this);
  14.         mainLayout->addWidget(hostLabel,0,0);
  15.         mainLayout->addWidget(LineEditLocalHostName,0,1);
  16.         mainLayout->addWidget(ipLabel,1,0);
  17.         mainLayout->addWidget(LineEditAddress,1,1);
  18.         mainLayout->addWidget(detailBtn,2,0,1,2);

  19.         setWindowTitle("Network");

  20.         connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetail()));
  21.        
  22.         //port=8000;
  23.         udpsocket=new QUdpSocket(this);
  24.         receiver=new QUdpSocket(this);
  25.         //receiver->bind(8000,QUdpSocket::ShareAddress);
  26.         connect(receiver,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));

  27. }



  28. void NetworkInformation::slotDetail()
  29. {
  30.         //char str[128]={0x01,0x04,0x00,0x00,0x00,0x02,0x71,0xcb};
  31.         QByteArray ba;
  32.         ba.resize(8);
  33.         ba[0]=0x01;
  34.         ba[1]=0x04;
  35.         ba[2]=0x00;
  36.         ba[3]=0x00;
  37.         ba[4]=0x00;
  38.         ba[5]=0x02;
  39.         ba[6]=0x71;
  40.         ba[7]=0xcb;
  41.         qint64 len;
  42.         QHostAddress adr=QHostAddress("192.168.1.33");

  43.         //len=udpsocket->writeDatagram(str,32,adr,port);
  44.         len=udpsocket->writeDatagram(ba,adr,8000);

  45.         if(len==-1)
  46.         {
  47.                 QMessageBox::information(this,tr("error"),tr("writedatagram failed!"));
  48.                 return;
  49.         }
  50.         qDebug()<<"yes"<<len;
  51. }

  52. void NetworkInformation::processPendingDatagram()
  53. {
  54.         while(receiver->hasPendingDatagrams())
  55.         {
  56.                 qDebug()<<"hasPendingDatagrams";
  57.                 QByteArray datagram;
  58.                 qint64 rlen;
  59.                 datagram.resize(receiver->pendingDatagramSize());

  60.                 rlen=receiver->readDatagram(datagram.data(),datagram.size());

  61.                 if(rlen==-1)
  62.                 {
  63.                         QMessageBox::information(this,tr("error"),tr("readdatagram failed!"));
  64.                         return;
  65.                 }
  66.         }
  67. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了