c++ - QUdpSocket: Program send but do not receive -



c++ - QUdpSocket: Program send but do not receive -

i have problem qudpsocket. want create simple programme send , receive info using udp protokol. read many similar topic not found solved. communication worked qhostadress::localhost, give same info send, if want send info outside set concrete address, illustration 194.181.161.134, not worked. mean info send can't receive. code:

class okno_gl : public qmainwindow { q_object public: explicit okno_gl(qwidget *parent = 0); qwidget *wg; qpushbutton *pb; qpushbutton *pl; qgridlayout *gr; qudpsocket *socket; qhostaddress host; qhostaddress bcast; signals: public slots: void slot_write(); void slot_load(); }; class receiver : public qobject { q_object public: receiver(); qudpsocket *udpsocket; public slots: void slot_processpendingdatagrams(); void slot_stch(qabstractsocket::socketstate state); }; okno_gl::okno_gl(qwidget *parent) : qmainwindow(parent) { pb = new qpushbutton("write" , this); pl = new qpushbutton("read" , this); wg = new qwidget(this); setcentralwidget(wg); gr = new qgridlayout(wg); gr->addwidget(pb); gr->addwidget(pl); socket = new qudpsocket(this); connect(pb , signal(clicked()) , slot(slot_write())); connect(pl , signal(clicked()) , slot(slot_load())); } void okno_gl::slot_write() { qbytearray datagram = "gs"; int send; send = socket->writedatagram(datagram.data(), qhostaddress("194.181.161.134"), 1200); } void okno_gl::slot_load() { } receiver::receiver() { udpsocket = new qudpsocket(this); connect(udpsocket, signal(statechanged(qabstractsocket::socketstate)) , , slot(slot_stch(qabstractsocket::socketstate))); if(udpsocket->bind(qhostaddress::any , 1200)) { qd "bind"; } else { qd "not bind"; } } void receiver::slot_processpendingdatagrams() { qd "receiver"; qbytearray datagram; { datagram.resize(udpsocket->pendingdatagramsize()); udpsocket->readdatagram(datagram.data(), datagram.size()); } while (udpsocket->haspendingdatagrams()); qd "datagram" << datagram; } void receiver::slot_stch(qabstractsocket::socketstate state) { qd "slot" << state; qbytearray datagram = "gs"; if ( state == qabstractsocket::boundstate ) { connect(udpsocket, signal(readyread()), this, slot(slot_processpendingdatagrams()) , qt::queuedconnection); } }

you should utilize write() instead of writedatagram()

qint64 qudpsocket::writedatagram(const char * data, qint64 size, const qhostaddress & address, quint16 port)

warning: calling function on connected udp socket may result in error , no packet beingness sent. if using connected socket, utilize write() send datagrams.

c++ qt udp qudpsocket

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -