Russian Qt Forum
Июнь 03, 2024, 23:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: UDP Echo client-server  (Прочитано 5033 раз)
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);
    }

}
Записан
garryHotDog
Гость
« Ответ #1 : Октябрь 09, 2010, 00:54 »

пробовал flush() делать сразу после отправки?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 20.