如果用python 写可以接收到设备发过来的广播,代码如下
def broadcast_receive():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#server_socket.bind(('192.168.0.100', BcastPort))
server_socket.bind(('0.0.0.0', BcastPort))
server_socket.setblocking(0)
i = 0
while True:
try:
data, addr = server_socket.recvfrom(10000)
i += 1
print('broadcast_receive: {0}'.format(i))
print('Received from {0} --- {1}'.format(addr, data))
print('len: ', len(data))
但换成QUdpSocket 后没有收到设备发出的广播,谢谢大佬的赐教...
udpSocket = new QUdpSocket(this);
// udpSocket->setSocketOption(QAbstractSocket::MulticastTtlOption);
udpSocket->bind(QHostAddress::AnyIPv4, BcastPort);
//udpSocket->bind(QHostAddress::LocalHost, BcastPort);
//udpSocket->bind(QHostAddress::Broadcast, BcastPort);
//udpSocket->bind(QHostAddress::Any, BcastPort);
udpSocket->waitForConnected(10000);
connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(readPendingDatagrams()));
void MainWindow::readPendingDatagrams()
{
qDebug() << "readPendingDatagrams";
while (udpSocket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
QString DataAsString = QString(datagram.data());
qDebug() << DataAsString;
//processTheDatagram(datagram);
}
}
--
FROM 76.90.44.*