2011-05-25 3 views
0

Я пытаюсь написать чат с помощью QTcpSocket и QTcpServer. Несколько кусков моего кодаПодключение QTcpSocket

Client

ChatClient::ChatClient(QObject *parent) 
    : QObject(parent) { 
    connect(&tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), 
      this, SLOT(error(QAbstractSocket::SocketError))); 
    connect(&tcpSocket, SIGNAL(connected()), 
      this, SLOT(requestForID())); 
    connect(&tcpSocket, SIGNAL(readyRead()), 
      this, SLOT(receiveMessage())); 
    tcpSocket.connectToHost(QHostAddress::LocalHost, PORT); 
} 

void ChatClient::requestForID() { 
    qDebug() << "Connected, requesting for ID"; 
    QByteArray segment; 
    QDataStream out(segment); 
    out.setVersion(QDataStream::Qt_4_7); 
    out << (quint16)0 << ID; 
    out.device()->seek(0); 
    out << (quint16)(segment.size() - sizeof(quint16)); 
    tcpSocket.write(segment); 
} 

void ChatClient::error(QAbstractSocket::SocketError error) { 
    qDebug() << "Socket error" << error; 
} 

Сервер

ChatServer::ChatServer(QObject *parent) 
    : QObject(parent) { 
    if (!tcpServer.listen(QHostAddress::LocalHost, PORT)) { 
     qDebug() << "Unable to start the server" 
       << tcpServer.errorString(); 
    } 
    connect(&tcpServer, SIGNAL(newConnection()), 
      this, SLOT(processConnection())); 
} 

сокет клиента никогда не подключается. Ошибка никогда не печатается. PORT = 6178. Runnig KUbuntu. Пинг на localhost из bash успешный. Что я делаю неправильно?

+1

Как tcpserver, так и tcpClient кажутся переменными-членами не указателя, и вы, кажется, не инициализировали их. – Abhijith

+0

Это идея. Я попытаюсь ответить, какие результаты. – OneMoreVladimir

+0

Преобразуется как в указатели, так и инициализируется новым QTcp * (это), но все равно не работает = ( – OneMoreVladimir

ответ

1

Я не вижу ошибок в вашем коде, уверены ли вы, что Qt и «сеть» работают правильно? Qt должен испускать ошибку, но, по крайней мере, ваши фрагменты кода здесь выглядят правильно. Может быть, ваш код никогда не будет вызван, добавьте некоторые отладочные сообщения в методы.

Наконец, вы можете создать примеры Qt Network и проверить, работает ли это на вашем компьютере. Если у вас нет примеров, посмотрите здесь: http://doc.qt.io/qt-5/examples-network.html (Fortune Server/Client for TCP)

+0

Спасибо за ответ Xander. Я создал примеры Tripplanner и triperver (из программирования Qt GUI 4), и они действительно работают, единственное различие заключается в том, что triperver использует QTcpSocket вместо QTcpServer. Согласно http://doc.qt.nokia.com/4.7/network-fortuneserver.html, я тоже не вижу никаких ошибок. – OneMoreVladimir

Смежные вопросы