Russian Qt Forum

Qt => Работа с сетью => Тема начата: Dima1985 от Сентябрь 22, 2011, 10:36



Название: QTCPSocket
Отправлено: 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 есть и должно на этот запрос ответить проверено


Название: Re: QTCPSocket
Отправлено: BRE от Сентябрь 22, 2011, 11:27
прием/отправление данных происходит асинхронно. Что бы это произошло нужно чтобы работал eventloop.
Поэтому: или работай асинхронно или сам крути цикл обработки событий или используй waitForBytesWritten/waitForReadyRead которые это будут делать за тебя.


Название: Re: QTCPSocket
Отправлено: Dima1985 от Сентябрь 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();
       
    }