crossplatform.ru

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

gpepsi
  опции профиля:
сообщение 27.1.2012, 13:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 31.3.2010
Пользователь №: 1582

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




Репутация:   0  


В приложении обрабатывается этот сигнал.
Запускаю клиента и сервер. Убиваю сервер - клиент посылает сигнал.
Запускаю сервер заново. Подключаюсь этим же клиентом.
Опять убиваю сервер - но клиент при повторном закритии сервера считает, что он подключен.
Не приходит сигнал, а состояние сокета как подключен.

Почему ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 2)
ViGOur
  опции профиля:
сообщение 27.1.2012, 14:09
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


А ты всё правильно уничтожаешь-закрываешь в клиенте?
Лучше покажи код, чтобы не гадать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gpepsi
  опции профиля:
сообщение 27.1.2012, 14:54
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 31.3.2010
Пользователь №: 1582

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




Репутация:   0  


Цитата(ViGOur @ 27.1.2012, 15:09) *
А ты всё правильно уничтожаешь-закрываешь в клиенте?
Лучше покажи код, чтобы не гадать...



вот тестовый код
1. Запусти клиента. Он будет искать сервер
2. Запусти сервер
3. Грохни сервер
4. Запусти сервер опять
5. Грохни сервер

После выполнения этой последовательности клиент у меня не видит разрыва соединения

client.h
#ifndef CLIENT_H
#define CLIENT_H

#include <QLocalSocket>

class Client : public QObject {
    Q_OBJECT

private:
    int m_timer;
    QLocalSocket m_socket;

    void start_connect        (void);
    virtual void timerEvent    (QTimerEvent* event);

private slots:
    void ready_read            (void);
    void connect_event        (void);
    void disconnect_event    (void);

public :
    explicit Client(QObject* parent = 0);
    virtual ~Client() { m_socket.close(); }
};

#endif


client.cpp
#include "client.h"
#include <QtCore/QCoreApplication>

Client::Client( QObject* parent /*= 0*/ ) : QObject(parent), m_timer(0)
{
    connect(&m_socket, SIGNAL(readyRead()),        SLOT(ready_read()));
    connect(&m_socket, SIGNAL(connected()),        SLOT(connect_event()));
    connect(&m_socket, SIGNAL(disconnected()),    SLOT(disconnect_event()));
    start_connect();
}

void Client::start_connect( void )
{
    if ((m_timer = startTimer(1000)) == 0)
    {
        qDebug() << "Error start timer";
    }    
}

void Client::timerEvent( QTimerEvent* event )
{
    m_socket.connectToServer("superpuperserver");
    if (!m_socket.waitForConnected(1000))
    {
        qDebug() << "Error connect";
    }
}

void Client::ready_read( void )
{
    qDebug() << "ready_read";
}

void Client::connect_event( void )
{
    killTimer(m_timer), m_timer = 0;
    qDebug() << "connect_event";
}

void Client::disconnect_event( void )
{
    if (!m_timer) start_connect();
    qDebug() << "disconnect_event";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Client client;
    return a.exec();
}


server.h
#ifndef SERVER_H
#define SERVER_H

#include <QLocalServer>

class Server : public QObject {
    Q_OBJECT

private:
    QLocalServer m_server;

private slots:
    void new_connection    (void);

public :
    explicit Server(QObject* parent = 0);
    virtual ~Server() { m_server.close(); }
};

#endif


server.cpp
#include "server.h"
#include <QtCore/QCoreApplication>

Server::Server( QObject* parent /*= 0*/ ) : QObject(parent)
{
    if (!m_server.listen("superpuperserver"))
    {
        QT_THROW("Error create server");
    }
    connect(&m_server, SIGNAL(newConnection()), SLOT(new_connection()));
}

void Server::new_connection( void )
{
    qDebug() << "New connection";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Server server;
    return a.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 8.6.2025, 1:22