UDP python侦听器不能与UDP cpp服务器一起使用

时间:2017-01-10 20:09:28

标签: python c++ sockets udp

我在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服务器一起工作吗?

0 个答案:

没有答案