crossplatform.ru

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


  Ответ в Qt3. Сервер с несколькими подключениями.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 27.5.2010, 9:19
  Тебе нужно создать дополнительный класс, некий менеджер подключений, в котором будут храниться указатели на все подключения и из которого можно будет сделать то, что ты хочешь...
sibmail Дата 27.5.2010, 3:28
  подскажите как сохранить список указателей на сокет
например, у меня следующий код для новых подключений

void MyServer::newConnection(int nSocketId)
    {
        socket = new QSocket(this);
        socket->setSocket(nSocketId);
        connect(socket, SIGNAL(delayedCloseFinished()), SLOT(slotConnectionClosed()));
        connect(socket, SIGNAL(readyRead()), SLOT(slotReadClient()));
    }

и код для чтения данных
void MyServer:: slotReadClient()
{ 
    QSocket* socket = (QSocket*)sender();
    QCString rcv_str_from_up;
    rcv_str_from_up.resize(socket->bytesAvailable() + 1 );
    socket->readBlock( rcv_str_from_up.data(), socket->bytesAvailable() );
    
И ВОТ ЗДЕСЬ НАДО РАЗОСЛАТЬ  ТИПА  пробежать по списку подключений и socket->writeBlock(rcv_str_from_up,rcv_str_from_up.length() );

}

sibmail Дата 26.5.2010, 12:49
 
Цитата(Litkevich Yuriy @ 26.5.2010, 13:26) *
sibmail, по оформлению сообщений читай тему: Справка по кнопкам и тэгам форума


хорошо
кто-нибудь ответит на вопрос?
Litkevich Yuriy Дата 26.5.2010, 12:26
  sibmail, по оформлению сообщений читай тему: Справка по кнопкам и тэгам форума
sibmail Дата 26.5.2010, 10:32
  берем пример из исходников qt3
Раскрывающийся текст

class ClientSocket : public QSocket
{
    Q_OBJECT
public:
    ClientSocket( int sock, QObject *parent=0, const char *name=0 ) :
    QSocket( parent, name )
    {
    line = 0;
    connect( this, SIGNAL(readyRead()),SLOT(readClient()) );
    connect( this, SIGNAL(connectionClosed()),SLOT(deleteLater()) );
    setSocket( sock );
    }

    ~ClientSocket()
    {
    }

signals:
    void logText( const QString& );

private slots:
    void readClient()
    {
    QTextStream ts( this );
    while ( canReadLine() ) {
        QString str = ts.readLine();
        emit logText( tr("Read: '%1'\n").arg(str) );

        ts << line << ": " << str << endl;
        emit logText( tr("Wrote: '%1: %2'\n").arg(line).arg(str) );

        line++;
    }
    }

private:
    int line;
};


/*
The SimpleServer class handles new connections to the server. For every
client that connects, it creates a new ClientSocket -- that instance is now
responsible for the communication with that client.
*/
class SimpleServer : public QServerSocket
{
    Q_OBJECT
public:
    SimpleServer( QObject* parent=0 ) :
    QServerSocket( 4242, 1, parent )
    {
    if ( !ok() ) {
        qWarning("Failed to bind to port 4242");
        exit(1);
    }
    }

    ~SimpleServer()
    {
    }

    void newConnection( int socket )
    {
    ClientSocket *s = new ClientSocket( socket, this );
    emit newConnect( s );
    }

signals:
    void newConnect( ClientSocket* );
};


/*
The ServerInfo class provides a small GUI for the server. It also creates the
SimpleServer and as a result the server.
*/
class ServerInfo : public QVBox
{
    Q_OBJECT
public:
    ServerInfo()
    {
    SimpleServer *server = new SimpleServer( this );

    QString itext = tr(
        "This is a small server example.\n"
        "Connect with the client now."
        );
    QLabel *lb = new QLabel( itext, this );
    lb->setAlignment( AlignHCenter );
    infoText = new QTextView( this );
    QPushButton *quit = new QPushButton( tr("Quit") , this );

    connect( server, SIGNAL(newConnect(ClientSocket*)),SLOT(newConnect(ClientSocket*)) );
    connect( quit, SIGNAL(clicked()), qApp,SLOT(quit()) );
    }

    ~ServerInfo()
    {
    }

private slots:
    void newConnect( ClientSocket *s )
    {
    infoText->append( tr("New connection\n") );
    connect( s, SIGNAL(logText(const QString&)),infoText, SLOT(append(const QString&)) );
    connect( s, SIGNAL(connectionClosed()),SLOT(connectionClosed()) );
    }

    void connectionClosed()
    {
    infoText->append( tr("Client closed connection\n") );
    }

private:
    QTextView *infoText;
};


int main( int argc, char** argv )
{
    QApplication app( argc, argv );
    ServerInfo info;
    app.setMainWidget( &info );
    info.show();
    return app.exec();
}



здесь получается что для каждого подключенного клиента создается новый класс, в котором и происходит своя работа.

Как в данном сюжете разослать полученно сообщение всем подключенным клиентам?? или подскажите другие способы реализации (Qt 3!!!!)
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 4:50