4

に問題がありQUdpSocketます。UDP プロトコルを使用してデータを送受信する簡単なプログラムを作成したいと考えています。私はすでに多くの同様のトピックを読みましたが、解決されていません。通信は のみで動作しQHostAdress::LocalHost、これと同じデータを send として渡しますが、外部にデータを送信したい場合は、具体的なアドレスを設定します。たとえば194.181.161.134、それは機能しません。つまり、データは送信されますが、受信できません。これは私のコードです:

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)) , this , 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;

        do {
            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);
       }

}
4

2 に答える 2