我在python和cpp中实现了UDP客户端和服务器。 cpp监听器捕获来自cpp服务器的消息,python监听器捕获来自python服务器的消息,但是当我运行cpp服务器和python客户端时,它只是等待消息或引发超时异常(使用时) sock.settimeout()选项)。
以下是我在cpp UDP服务器中发送消息的方式:
groupAddress = QHostAddress(serverIP);
udpSocket = new QUdpSocket(this);
QByteArray datagram = QByteArray::number(someIntNumber)
udpSocket->writeDatagram(datagram.data(), datagram.size(), groupAddress, portNumber);
完美地使用这个cpp监听器的作品:
groupAddress = QHostAddress(serverIP);
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::AnyIPv4, serverPort, QUdpSocket::ShareAddress);
udpSocket->joinMulticastGroup(groupAddress);
connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(processPendingDatagrams()));
void StreamingClientThread::processDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
printf("%s \n",datagram.data());
}
}
但是使用UDP侦听器的这个python实现不起作用:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('', PORT)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(server_address)
next_val = sock.recv(2048)
我还检查了netstat中的两个侦听器“signature”,它们看起来都是一样的:
UDP 0.0.0.0:45454
45454是我正在收听的端口。 对UDP服务器使用以下python implpemention时,同一个侦听器可以正常工作:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', port_numder)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(server_address)
sock.sendto(data_to_send, server_address)
知道为什么python监听器不能与cpp服务器一起工作吗?