Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. TCP chat
Qt 6.11 is out! See what's new in the release blog

TCP chat

Scheduled Pinned Locked Moved Unsolved Polish
2 Posts 1 Posters 1.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Z Offline
    Z Offline
    zoe9
    wrote on last edited by
    #1

    To juz kolejny problem z TCP w QT.
    Napisalem sobie prymitywna aplikacje chatu, jednak na serwerze kiedy chce wyslac wiadomosc pokazuje sie error i zamyka aplikacje. Niewiem jak to naprawic, na kliencie bo wcisnieciu buttona tekst znika i nie ma zadnego bledu.

    To moje kody zrodlowe:
    server.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2016-01-17T12:45:39
    #
    #-------------------------------------------------
    
    QT       += core gui
    QT       += network
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = server
    TEMPLATE = app
    
    
    SOURCES += main.cpp\
            server.cpp
    
    HEADERS  += server.h
    
    FORMS    += server.ui
    
    

    server.h

    #ifndef SERVER_H
    #define SERVER_H
    
    #include <QMainWindow>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <QHostAddress>
    #include <QList>
    
    namespace Ui {
    class server;
    }
    
    class server : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit server(QWidget *parent = 0);
        ~server();
    
    public slots:
        void connect_new();
        void leer_socketclient();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::server *ui;
        QTcpServer *tcpserver;
        QTcpSocket *tcpclient;
    };
    
    #endif // SERVER_H
    
    

    server.cpp

    #include "server.h"
    #include "ui_server.h"
    
    server::server(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::server)
    {
        ui->setupUi(this);
    
        tcpserver = new QTcpServer (this);
        //tcpserver->setMaxPendingConnections();
    
        tcpserver->listen(QHostAddress::LocalHost, 1234);
        connect(tcpserver, SIGNAL(newConnection()), this, SLOT(connect_new()));
    }
    
    server::~server()
    {
        delete ui;
    }
    
    void server::connect_new()
    {
        //tcpclient = tcpserver->nextPendingConnection();
        connect(tcpclient, SIGNAL(readyRead()), this, SLOT(leer_socketclient()));
    }
    
    void server::leer_socketclient()
    {
        QByteArray buffer;
        buffer.resize( tcpclient->bytesAvailable() );
        tcpclient->read( buffer.data(), buffer.size() );
        ui->plainTextEdit->setReadOnly( true );
        ui->plainTextEdit->appendPlainText( QString (buffer));
    }
    
    void server::on_pushButton_clicked()
    {
        tcpclient->write( ui->lineEdit->text().toLatin1().data(), ui->lineEdit->text().size());
        ui->lineEdit->clear();
    }
    
    

    main.cpp

    #include "server.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        server w;
        w.show();
    
        return a.exec();
    }
    
    

    ============================================================================
    client.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2016-01-17T12:22:05
    #
    #-------------------------------------------------
    
    QT       += core gui
    QT       += network
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = client
    TEMPLATE = app
    
    
    SOURCES += main.cpp\
            client.cpp
    
    HEADERS  += client.h
    
    FORMS    += client.ui
    
    

    client.h

    #ifndef CLIENT_H
    #define CLIENT_H
    
    #include <QMainWindow>
    #include <QTcpSocket>
    #include <QHostAddress>
    #include <QList>
    
    namespace Ui {
    class client;
    }
    
    class client : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit client(QWidget *parent = 0);
        ~client();
    
    
    private slots:
        void on_pushButton_clicked();
    
    public slots:
        void leer_socketserver();
    
    private:
        Ui::client *ui;
    
        QTcpSocket *tcpclient;
    };
    
    #endif // CLIENT_H
    
    

    client.cpp

    #include "client.h"
    #include "ui_client.h"
    
    client::client(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::client)
    {
        ui->setupUi(this);
    
        tcpclient = new QTcpSocket (this);
    
        tcpclient->connectToHost( QHostAddress::LocalHost , 1234);
    
        connect (tcpclient, SIGNAL (readyRead()), this, SLOT (leer_socketserver()));
    }
    
    client::~client()
    {
        delete ui;
    }
    
    void client::on_pushButton_clicked()
    {
        tcpclient->write( ui->lineEdit->text().toLatin1().data(), ui->lineEdit->text().size());
        ui->lineEdit->clear();
    }
    
    void client::leer_socketserver()
    {
        QByteArray buffer;
        buffer.resize( tcpclient->bytesAvailable() );
        tcpclient->read( buffer.data(), buffer.size() );
        ui->plainTextEdit->setReadOnly( true );
        ui->plainTextEdit->appendPlainText( QString (buffer));
    }
    
    

    main.cpp

    #include "client.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        client w;
        w.show();
    
        return a.exec();
    }
    
    
    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      zoe9
      wrote on last edited by
      #2

      Udalo mi sie naprawic usuwajac w server.cpp

      tcpserver->newConnection();
      //i dodajac
      tcpclient = new QTcpSocket (this);
      

      Jednak pojawil sie kolejny problem. Wiadomosci dochodza kiedy odpale na 1 pc. Kiedy chce to zrobic na 2 podlaczonych do 1 routera, wiadomosci nie dochodza, a po stronie servera w 3 zakladce (komunikaty aplikacji) po probie wyslania wiadomosci pojawia sie :

      QIODevice::write (QTcpSocket): device not open
      
      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved