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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Segmentation fault при создании Qtcpsocket [Решено]  (Прочитано 3452 раз)
hom9n
Гость
« : Апрель 18, 2012, 15:23 »

Здравствуйте уважаемые форумчане. Возникла проблема при запуске программы на удаленном сервере (debian). Сама программа предтавляет из себя консольный сервер, который должен принимать запросы от клиентов через инет. Суть проблемы состоит в том, что при запуске локально все работает прекрасно. А вот при запуске программы на сервере при попытке создании connect(m_ptcpServer, SIGNAL(newConnection()),this, SLOT(slotNewConnection())); выбивает ошибку segmentation fault. Как выяснилось проблема в создании нового socket. Почему выдает эту ошибку ума не приложу.
Ниже приведен текст программы.
main.cpp
Код:
#include <QtCore/QCoreApplication>
#include "server.h"
#include <QtSql>



int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
       server *create_server=new server();
       qDebug()<<"server create";
    return a.exec();
}

server.h
Код:
#ifndef SERVER_H
#define SERVER_H

#include <QObject>
#include <QtCore>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>

class server : public QObject
{
    Q_OBJECT
public:
        server();
        QTcpServer *m_ptcpServer;
        quint16 m_nNextBlockSize;
        void sendToClient(QTcpSocket* pSocket, const QString& str);
protected:
        void sendToClients(const QByteArray& line);
public slots:
        void slotNewConnection();
        void slotReadClient();

};

#endif // SERVER_H


server.cpp

Код:
#include "server.h"
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <QtSql>


server::server()
{
   m_nNextBlockSize=0;
        m_ptcpServer = new QTcpServer(this);
        if (!m_ptcpServer->listen(QHostAddress::Any, 2323)) {
        qDebug()<<"Server is not working "<<m_ptcpServer->errorString();
        m_ptcpServer->close();
        return;
        }
        qDebug()<<"Server is working";
       connect(m_ptcpServer, SIGNAL(newConnection()),this, SLOT(slotNewConnection()));
}

void server::slotNewConnection()
{
        QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection(); //ОШИБКА ЗДЕСЬ!!!
        connect(pClientSocket, SIGNAL(disconnected()),
                        pClientSocket, SLOT(deleteLater())
                   );
        connect(pClientSocket, SIGNAL(readyRead()),
                        this,  SLOT(slotReadClient())
                   );
        qDebug()<<"Server Response: Connected!";

}
« Последнее редактирование: Апрель 18, 2012, 16:15 от hom9n » Записан
hom9n
Гость
« Ответ #1 : Апрель 18, 2012, 15:32 »

Точнее даже ошибка происходит при попытке самого connect Непонимающий
Записан
V1KT0P
Гость
« Ответ #2 : Апрель 18, 2012, 15:36 »

Точнее даже ошибка происходит при попытке самого connect Непонимающий
Я всегда наследуюсь от QTcpServer и переопределяю void incomingConnection(int handle); и вызываю слот void newClient(int handle);. А уж сокет затем создается банально:
Код
C++ (Qt)
QTcpSocket *socket = new QTcpSocket(this);
socket->setSocketDescriptor(handle);
Работает как часы. Вроде так правильнее делать.
Записан
hom9n
Гость
« Ответ #3 : Апрель 18, 2012, 15:39 »

спасибо, сейчас поробую Улыбающийся
Записан
hom9n
Гость
« Ответ #4 : Апрель 18, 2012, 16:14 »

Спасибо проблема решена совет очень помог))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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