在QT中,尝试使用UDP从特定IP地址接收数据

在QT中,尝试使用UDP从特定IP地址接收数据,qt,udp,Qt,Udp,我试图在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地址和端口的发送者 提前谢谢 NetBroadcas

我试图在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
...
}

实际上,一个开放的UDP套接字是用来接收来自任何IP地址的任何东西,这些IP地址能够在您的网络中打开该UDP套接字。 您可以阻止其他IP地址连接到此特定接口,也可以

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

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


我不确定我是否理解这个问题,但我认为你应该在接收时过滤地址。比如
udpSocket->readDatagram(datagram.data()、datagram.size()、和address)
then
if(address!=QHostAddress(“166.0.0.245”))返回。感谢您的回复,我的意思是我只需要从一个ip地址接收数据,如何设置@receivers end只从这个ip地址获取数据,其余的都忽略它。使用BSD套接字实现这一点的标准方法是调用UDP套接字。由于Qt不允许访问底层套接字描述符(据我所知),您可能希望尝试看看它有什么效果(如果有),谢谢,我会尝试这样做。