crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Передача структуры между процессами, unix сокеты
pulo
  опции профиля:
сообщение 21.2.2011, 2:49
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 21.2.2011
Пользователь №: 2426

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вобщем пытаюсь передать структуру вида:
struct tg 
{
  __u8 sender;
  __u32 seqno;
  __u8 type;
  __u32 query_data;
  __u32 ip[4];
  __u32 sin_port;
  __u8 protocol;
  __u8 family;
};

используя unix сокеты, есть демон который покдлючается к оболочке на Qt, если считывать/записывать используя не qt'шные recv и write то все гуд.
Проблема возникает при считывании используя Qt методы:
сервер создаю:
server = new QLocalServer(this);
if (!server->listen("/tmp/tg"))  {}
connect(server, SIGNAL(newConnection()), this, SLOT(read_socket()));

и соответственно метод:
void Window::read_socket()
{
    QLocalSocket *clientConnection = server->nextPendingConnection();
    QDataStream in(clientConnection);
    in.setVersion(QDataStream::Qt_4_0);
        clientConnection->waitForReadyRead(10000); // без него одни нули
        in >> query-> sender;
    in >> query->seqno;
    in >> query->query_type;
    in >> query->query_data;
    in >> query->ip1;
    in >> query->ip2;
    in >> query->ip3;
    in >> query->ip4;
    in >> query->sin_port;
    in >> query->protocol;
    in >> query->family;
        ...
}

в Qt структуру объявил как:
struct tg_query 
{
    quint8 sender;
    quint32 seqno;
    quint8 query_type;
    quint32 query_data;
    quint32 ip[4];
    quint32 sin_port;
    quint8 protocol;
    quint8 family;
};

но вот значения принимаются явно не те, что отправляются клиентом.
Причина редактирования: применяй теги!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
pulo
  опции профиля:
сообщение 21.2.2011, 15:36
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 21.2.2011
Пользователь №: 2426

Спасибо сказали: 0 раз(а)




Репутация:   0  


Решил проблему просто:
    QLocalSocket *clientConnection = server->nextPendingConnection();
    clientConnection->waitForReadyRead(100);
    char *data;
    data = new char[40];
    clientConnection->read(data, 40);
    tg_query *query = (tg_query *)data;


с классами потоков так и не получилось реализовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 19:48