【发布时间】: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)看看有什么——如果有的话——效果。