Russian Qt Forum

Qt => Работа с сетью => Тема начата: Tin-moon от Октябрь 08, 2010, 19:49



Название: UDP Echo client-server
Отправлено: Tin-moon от Октябрь 08, 2010, 19:49
Вопрос в чем ошибка, клиент не получает сообщение от сервера
Клиент:
Код:
MainWindow::MainWindow(QWidget *parent): QWidget(parent){
    QTextCodec *codec = QTextCodec::codecForName("cp1251");
    QTextCodec *codec2 = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec2);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
    setWindowTitle(tr("EchoUDP клиент"));

    m_ptxt = new QTextEdit();
    start = new QPushButton(tr("Отправить"));
    line = new QLineEdit();

    udpSocket = new QUdpSocket();
    udpSocket->bind(7,QUdpSocket::ShareAddress);

    QVBoxLayout *pvb = new QVBoxLayout;
    pvb->addWidget(new QLabel("<h1>EchoUDP Client</h1>"));
    pvb->addWidget(m_ptxt);
    pvb->addWidget(line);
    pvb->addWidget(start);
    setLayout(pvb);


    connect(start, SIGNAL(clicked()), this, SLOT(startBroadcasting()));
    connect(udpSocket,SIGNAL(readyRead()),this,SLOT(answer()));


}

void MainWindow::startBroadcasting(){
    QByteArray datagram;
    QHostAddress a(QString("127.0.0.1"));
    int port = 7;
    datagram.append(line->text());
    udpSocket->writeDatagram(datagram.data(), datagram.size(),a,port);

}

void MainWindow::answer(){
        QByteArray datagram;
        QHostAddress a;
        quint16 port;
        datagram.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(datagram.data(),datagram.size(), &a, &port);
        m_ptxt->append(datagram.data());
}

Сервер
Код:
MainWindow::MainWindow(quint16 nPort,QWidget *parent): QWidget(parent),m_nNextBlockSize(0){
    QTextCodec *codec = QTextCodec::codecForName("cp1251");
    QTextCodec *codec2 = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec2);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);

    setWindowTitle(tr("EchoUDP сервер"));

    mySocket = new QUdpSocket(this);
    mySocket->bind(7,QUdpSocket::ShareAddress);
    connect(mySocket,SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));

    m_ptxt = new QTextEdit;
    m_ptxt->setReadOnly(true);

    QVBoxLayout *pvb = new QVBoxLayout;
    pvb->addWidget(new QLabel("<h1>EchoUDP Server</h1>"));
    pvb->addWidget(m_ptxt);
    setLayout(pvb);
}

void MainWindow::processPendingDatagrams(){
    while (mySocket->hasPendingDatagrams()){
        QByteArray datagram;
        QHostAddress a;
        quint16 port;
        datagram.resize(mySocket->pendingDatagramSize());
        mySocket->readDatagram(datagram.data(),datagram.size(),&a,&port);
        m_ptxt->append(datagram.data());
        mySocket->writeDatagram(datagram.data(),datagram.size(),a,port);
    }

}


Название: Re: UDP Echo client-server
Отправлено: garryHotDog от Октябрь 09, 2010, 00:54
пробовал flush() делать сразу после отправки?