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
Forum Updated to NodeBB v4.3 + New Features

TCP chat

Scheduled Pinned Locked Moved Unsolved Polish
2 Posts 1 Posters 1.8k 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