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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTCPSocket  (Прочитано 2429 раз)
Dima1985
Гость
« : Сентябрь 22, 2011, 10:36 »

Помогите новичку.

Не могу настроить передачу с помощью сокетов.
Код:
 
Код:
  QTcpSocket socket;
    socket.connectToHost(QHostAddress("10.0.6.10"),502);
    int i=0;
    if (socket.waitForConnected(10000))
    {
        i++;
        unsigned char buf[256]= {0,0,0,0,0,6,1,4,0,0,0,2};
        i = socket.write((char *)buf,12);
        while  (0 == socket.bytesAvailable());
        i = socket.read((char *)buf,256);
        i++;
        socket.close();
    }
проблема в том что нет никакого ответа.
Да функция записи возвращает 12, вроди как отослано все.
Но анализатор сети этого пакета не ловит.
И ответ всегда 0 байт.
Хотя устройство по адресу  10.0.6.10 есть и должно на этот запрос ответить проверено
Записан
BRE
Гость
« Ответ #1 : Сентябрь 22, 2011, 11:27 »

прием/отправление данных происходит асинхронно. Что бы это произошло нужно чтобы работал eventloop.
Поэтому: или работай асинхронно или сам крути цикл обработки событий или используй waitForBytesWritten/waitForReadyRead которые это будут делать за тебя.
Записан
Dima1985
Гость
« Ответ #2 : Сентябрь 22, 2011, 11:55 »

прием/отправление данных происходит асинхронно. Что бы это произошло нужно чтобы работал eventloop.
Поэтому: или работай асинхронно или сам крути цикл обработки событий или используй waitForBytesWritten/waitForReadyRead которые это будут делать за тебя.

Спасибо!
Так работает:
Код:
 QTcpSocket socket;
    socket.connectToHost("10.0.6.10",502);
    int i=0;
    if (socket.waitForConnected(10000))
    {
        i++;
        unsigned char buf[256]= {0,0,0,0,0,6,1,4,0,0,0,10};

        i = socket.write((char *)buf,12);
        if (socket.waitForBytesWritten(10))
        {
            if(socket.waitForReadyRead(10))
            {
                i = socket.read((char *)buf,256);
            }
        }
        socket.disconnectFromHost();
        socket.waitForDisconnected(1000);
        socket.close();
       
    }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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