程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> QT編寫簡單的TCP附源程序

QT編寫簡單的TCP附源程序

編輯:關於C++

QT編寫簡單的TCP附源程序。本站提示廣大學習愛好者:(QT編寫簡單的TCP附源程序)文章只能為提供參考,不一定能成為您想要的結果。以下是QT編寫簡單的TCP附源程序正文


TCP客戶端界面:

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 
  4 MainWindow::MainWindow(QWidget *parent) :
  5     QMainWindow(parent),
  6     ui(new Ui::MainWindow)
  7 {
  8     ui->setupUi(this);
  9     ui->sendButton->setEnabled(false);
 10     ui->disconnectButton->setEnabled(false);
 11     ui->IPLineEdit->setText("192.168.3.4");
 12     ui->portLineEdit->setText("4001");
 13     tcpSocket = NULL;//使用前先清空
 14 }
 15 
 16 MainWindow::~MainWindow()
 17 {
 18     delete tcpSocket;
 19     delete ui;
 20 }
 21 
 22 void MainWindow::sendMassage(){}
 23 
 24 void MainWindow::readMassage()
 25 {
 26     QByteArray data=tcpSocket->readAll();
 27     ui->clearLineEdit->setText(QString(data));
 28 }
 29 
 30 void MainWindow::displayError(QAbstractSocket::SocketError)
 31 {
 32     QMessageBox::warning (this, tr("Warnning"), tcpSocket->errorString ());
 33     tcpSocket->close ();
 34     ui->connnectButton->setEnabled (true);
 35     ui->disconnectButton->setEnabled (false);
 36     ui->sendButton->setEnabled (false);
 37 }
 38 
 39 void MainWindow::on_sendButton_clicked()
 40 {
 41     QString sendmessage;
 42     sendmessage = ui->sendLineEdit->text();
 43    /* if(sendmessage == NULL) return;
 44     QByteArray block;//暫時存儲我們需要發送的數據
 45     QDataStream out(&block,QIODevice::WriteOnly);//TCP必須和數據流一起使用
 46     out.setVersion(QDataStream::Qt_5_7);//設置數據流的版本(服務器和主機版本一定相同)
 47     out << sendmessage;
 48     tcpSocket->write(block);*/
 49     QByteArray data;
 50     data.append(sendmessage);
 51     tcpSocket->write(data);
 52 }
 53 
 54 void MainWindow::on_clearButton_clicked()
 55 {
 56     ui->clearLineEdit->clear();
 57 }
 58 
 59 void MainWindow::on_connnectButton_clicked()
 60 {
 61     flag = false;
 62     if(tcpSocket) delete tcpSocket;//如果有指向其他空間直接刪除
 63     tcpSocket = new QTcpSocket(this);//申請堆空間有TCP發送和接受操作
 64     tcpIp = ui->IPLineEdit->text();
 65     tcpPort = ui->portLineEdit->text();
 66     if(tcpIp==NULL||tcpPort==NULL)//判斷IP和PORT是否為空
 67     {
 68         QMessageBox msgBox;
 69         msgBox.setText("IP or PORT is Empty");
 70         msgBox.exec();
 71         return;
 72     }
 73     tcpSocket->connectToHost(tcpIp,tcpPort.toInt());//連接主機
 74     connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,
 75             SLOT(displayError(QAbstractSocket::SocketError)));//錯誤連接
 76     connect(tcpSocket,SIGNAL(connected()),this,
 77             SLOT(connectUpdata()));//更新連接之後按鈕的使能
 78     connect(tcpSocket,SIGNAL(readyRead()),this,
 79             SLOT(readMassage()));//讀取信息的連接
 80     ui->connnectButton->setEnabled (false);
 81     ui->disconnectButton->setEnabled (true);
 82 
 83 }
 84 
 85 void MainWindow::on_disconnectButton_clicked()
 86 {
 87     tcpSocket->abort();
 88     delete tcpSocket;
 89     tcpSocket=NULL;
 90     disconnectUpdata();
 91 }
 92 
 93 void MainWindow::connectUpdata()
 94 {
 95     if(!flag)
 96     {
 97         QMessageBox msgBox;
 98         msgBox.setText("TCP connect successful");
 99         msgBox.exec();
100         ui->connnectButton->setEnabled(false);
101         ui->sendButton->setEnabled(true);
102         ui->disconnectButton->setEnabled(true);
103         ui->IPLineEdit->setEnabled(false);
104         ui->portLineEdit->setEnabled(false);
105     }
106     flag=true;
107 }
108 
109 void MainWindow::disconnectUpdata()
110 {
111     ui->connnectButton->setEnabled(true);
112     ui->sendButton->setEnabled(false);
113     ui->disconnectButton->setEnabled(false);
114     ui->IPLineEdit->setEnabled(true);
115     ui->portLineEdit->setEnabled(true);
116 }
 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QTcpServer>
 6 #include <QTcpSocket>
 7 #include <QMessageBox>
 8 namespace Ui {
 9 class MainWindow;
10 }
11 
12 class MainWindow : public QMainWindow
13 {
14     Q_OBJECT
15 
16 public:
17     explicit MainWindow(QWidget *parent = 0);
18     ~MainWindow();
19 private slots:
20    void sendMassage();
21    void readMassage();
22    void displayError(QAbstractSocket::SocketError);
23    void connectUpdata();
24    void disconnectUpdata();
25    void on_sendButton_clicked();
26    void on_clearButton_clicked();
27    void on_connnectButton_clicked();
28    void on_disconnectButton_clicked();
29 
30 private:
31    //QTcpServer *tcpServer;//不用再建立服務器類了,直接建立下面的套接字
32    QTcpSocket *tcpSocket;//直接建立TCP套接字類
33    QString tcpIp;//存儲IP地址
34    QString tcpPort;//存儲端口地址
35    bool flag;
36    Ui::MainWindow *ui;
37 
38 };
39 
40 #endif // MAINWINDOW_H
 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2017-02-23T10:33:02
 4 #
 5 #-------------------------------------------------
 6 
 7 QT       += core gui
 8 QT       += network
 9 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10 
11 TARGET = TCP_Server
12 TEMPLATE = app
13 
14 # The following define makes your compiler emit warnings if you use
15 # any feature of Qt which as been marked as deprecated (the exact warnings
16 # depend on your compiler). Please consult the documentation of the
17 # deprecated API in order to know how to port your code away from it.
18 DEFINES += QT_DEPRECATED_WARNINGS
19 
20 # You can also make your code fail to compile if you use deprecated APIs.
21 # In order to do so, uncomment the following line.
22 # You can also select to disable deprecated APIs only up to a certain version of Qt.
23 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
24 
25 
26 SOURCES += main.cpp\
27         mainwindow.cpp
28 
29 HEADERS  += mainwindow.h
30 
31 FORMS    += mainwindow.ui

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved