【问题标题】:In QT Trying to receive data from specific IP address using UDP在 QT 中尝试使用 UDP 从特定 IP 地址接收数据
【发布时间】:2020-01-01 15:17:27
【问题描述】:

我正在尝试使用 QT 中的 UDP 协议从特定 IP 地址(如 166.0.0.245)接收数据。我的网络中有多个 udp 连接。

但问题是我从任何 IP 地址而不是特定 IP 地址接收。

下面我附上我的代码,我正在设置我的接收者的 IP 地址,即 166.0.0.34,我的发件人 IP 地址是 166.0.0.245 -> 我在哪里专门设置这个 IP 地址,以便我只能接收那个 IP地址并丢弃我网络中的其余 IP 地址。 有人可以建议我在哪里专门设置我的 ip 地址在接收方,它只接受一个具有特定 IP 地址和端口的发件人。

提前致谢

NetBroadcasterDlg::NetBroadcasterDlg(QWidget *parent) :  //Main Function
    QWidget(parent),
    ui(new Ui::NetBroadcasterDlg)
{
    // ethernet initialisation and binding  wini
    udpSocket = new QUdpSocket(this);
    udpSocket_send = new QUdpSocket(this);

    udpSocket->bind(QHostAddress("166.0.0.34"), 1100, QUdpSocket::ShareAddress);
    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(processPendingDatagrams()));
...
}

void NetBroadcasterDlg::processPendingDatagrams()
{
    // Read data from ethernet
    while (udpSocket->hasPendingDatagrams()) {
        datagram.resize(int(udpSocket->pendingDatagramSize()));

        udpSocket->readDatagram(datagram.data(), datagram.size()); 

// Sending data to the Target

        udpSocket_send->writeDatagram(datagram.data(), datagram.size(),
                                 QHostAddress("166.168.1.20"), 2500);   //target address and port
...
}

【问题讨论】:

  • 不确定我是否理解了这个问题,但我认为您应该在接收时过滤地址。比如udpSocket->readDatagram(datagram.data(), datagram.size(), &address); 然后if (address != QHostAddress("166.0.0.245")) return;
  • 感谢回复,我的意思是我只需要从一个IP地址接收数据,我如何设置@receives end 只从这个IP地址获取数据,其余的都忽略它。跨度>
  • 使用 BSD 套接字实现此目的的标准方法是在 UDP 套接字上调用 connect。由于 Qt 不允许访问底层套接字描述符(据我所知),您可能想尝试udpSocket->connectToHost("166.168.1.20", 2500) 看看有什么——如果有的话——效果。

标签: qt udp


【解决方案1】:

实际上,打开的 UDP 套接字旨在从您网络中能够打开该 UDP 套接字的任何IP 地址接收任何内容。 您可以阻止其他 IP 地址连接到此特定接口或

QHostAddress fromAddress;
udpSocket->readDatagram(datagram.data(), datagram.size(),&fromAddress);

if(fromAddress.isEqual(QHostAddress("166.0.0.245")){
// do whatever with your filtered data
}

【讨论】:

  • 谢谢,我会努力的。
猜你喜欢
  • 2014-08-23
  • 1970-01-01
  • 2023-02-12
  • 2018-12-16
  • 1970-01-01
  • 2021-01-20
  • 2015-02-21
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多