如何在QT中通过特定的网络接口编写数据报?

6
我在Linux上使用QT 4.8。
我想编写UDP数据报,并从特定的网络接口发送它。
我有两个接口:
1.WLan:IP 192.168.1.77和MAC地址
2.Eth:IP 192.168.1.80和另一个MAC地址
当这两个接口都启用时,我该如何选择其中一个网络接口并从中编写数据报?
2个回答

7
简单来说,绑定到eth接口的一个地址。 Qt有一个非常干净的可以使用。但是当我需要更底层的操作时,我会使用类似于ACE C++库这样的东西。
不管怎样,下面是一些起点代码,但你应该在QtCreator或Google上查找更具体的示例:
QUdpSocket socket;

// I am using the eth interface that's associated 
// with IP 192.168.1.77
//
// Note that I'm using a "random" (ephemeral) port by passing 0

if(socket.bind(QHostAddress("192.168.1.77"), 0))
{
  // Send it out to some IP (192.168.1.1) and port (45354).
  qint64 bytesSent = socket.writeDatagram(QByteArray("Hello World!"), 
                                          QHostAddress("192.168.1.1"), 
                                          45354);
  // ... etc ...
}

2
如果您使用的是Qt 5.8或更高版本,则可以使用QNetworkDatagram函数之一,如下所示:https://doc.qt.io/qt-5/qnetworkdatagram.html#setInterfaceIndex。这将帮助您解决相关的技术问题。"最初的回答"。
void QNetworkDatagram::setInterfaceIndex(uint index)

index 与 QNetworkInterface 中的索引匹配时:

最初的回答:Where index matches the index from QNetworkInterface:

// List all of the interfaces
QNetworkInterface netint;
qDebug() << "Network interfaces =" << netint.allInterfaces();

以下是一个例子:

这里有一个例子:

QByteArray data;
data.fill('c', 20);  // stuff some data in here
QNetworkDatagram netDatagram(data, QHostAddress("239.0.0.1"), 54002);
netDatagram.setInterfaceIndex(2);  // whatever index 2 is on your system
udpSocket->writeDatagram(netDatagram);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接