I am running a udpsocket client program which writes to and reads from server. when I run it, bind() returns false. Although I can still send data but I am wondering why sockets cannot bind and trigger readState slot.
As I checked a udp client does not bind, so I only set the port when initialized it. later I write like this:
void UDP::UDPInit(int port)
{
socketPort = port;
}
void UDP::UDPInit(int port)
{
socketPort = port;
udpsocket = new QUdpSocket(this);
}
To copy to clipboard, switch view to plain text mode
{
if(udpsocket
->writeDatagram
(data.
data(),
QHostAddress(ip
),socketPort
)==-1) emit clientLogMessage
(QString("UDPCLIENT : Write problem !"));
else
udpsocket->flush();
// QByteArray datagram;
// int m = udpsocket->read(datagram.data(), 11);
// qDebug() << errno;
// qDebug() << m;
while (!udpsocket->hasPendingDatagrams()) {
datagram.resize(udpsocket->pendingDatagramSize());
qDebug() << udpsocket->pendingDatagramSize();
udpsocket->readDatagram(datagram.data(), datagram.size());
emit dataReceived(datagram);
}
}
but the result is -1 and it does not read anything from it. WHY? how can I solve this problem?
void UDP::sendCommand(QByteArray data)
{
if(udpsocket->writeDatagram(data.data(),QHostAddress(ip),socketPort)==-1)
emit clientLogMessage(QString("UDPCLIENT : Write problem !"));
else
udpsocket->flush();
// QByteArray datagram;
// int m = udpsocket->read(datagram.data(), 11);
// qDebug() << errno;
// qDebug() << m;
while (!udpsocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpsocket->pendingDatagramSize());
qDebug() << udpsocket->pendingDatagramSize();
udpsocket->readDatagram(datagram.data(), datagram.size());
emit dataReceived(datagram);
}
}
but the result is -1 and it does not read anything from it. WHY? how can I solve this problem?
To copy to clipboard, switch view to plain text mode
Bookmarks