我已经使用 QUdpSocket 编写了一个简单的 udp 多播服务器,但 writedatagram 函数只有在我以 root 权限运行应用程序时才有效。这是正常的吗?这是一种痛苦。加上 iperf(例如)似乎在没有 root 权限的情况下工作。我究竟做错了什么?
平台是 Ubuntu 12.04 3.2.0-56-generic x86_64 我的代码很简单...
#define MULTICAST_ADDR "192.168.1.255"
#define MULTICAST_PORT 45454
udpSocket = new QUdpSocket();
udpSocket->setSocketOption(QAbstractSocket::MulticastTtlOption,1);
udpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,0);
x = udpSocket->writeDatagram(ba->data()+sent,
toSend,
QHostAddress(MULTICAST_ADDR),
MULTICAST_PORT);
此代码基于 QT 自己的示例代码,没有提及 root 权限。
如果我只是将 IP 地址更改为非广播/多播地址(例如 192.168.1.18),我不需要 root 权限。