qt中的tcp编程

server

1.server.h
#define DIALOG_H

#include <QDialog>
#include <QTcpServer>
#include <QTcpSocket>
#include<QHostAddress>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Dialog *ui;
    QTcpServer *p;
    QTcpSocket *newp;//产生的新socket
    QHostAddress *hp;
public slots:
    void apprecvconnect();//处理连接函数
    void getmsg();
};

#endif // DIALOG_H

server.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include<QString>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    p = new QTcpServer();

   // newp = new QTcpSocket();
    hp = new QHostAddress("192.168.1.30");
    connect(p,SIGNAL(newConnection()),this,SLOT(apprecvconnect()));
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    p->listen(*hp,6000);

}
void Dialog::apprecvconnect()
{
    newp = p->nextPendingConnection();
    connect(newp,SIGNAL(readyRead()),this,SLOT(getmsg()));

}
void Dialog::getmsg()
{
QByteArray tmp = newp->readAll();
QString tmp2(tmp);
ui->label_2->setText(tmp2);
}

void Dialog::on_pushButton_2_clicked()
{
    QString tmp = ui->lineEdit->text();
newp->write(tmp.toLatin1());
}

client.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QTcpServer>
#include<QTcpSocket>
#include<QHostAddress>
#include<QMessageBox>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();

public slots:
    void sett();
    void getmsg();

private:
    Ui::Dialog *ui;
    QTcpSocket *p;
    QHostAddress *hp;
};

#endif // DIALOG_H

sever.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    p= new QTcpSocket();
    hp = new QHostAddress("192.168.1.30");
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    p->connectToHost(*hp,6000);
    connect(p,SIGNAL(connected()),this,SLOT(sett()));
}
void Dialog::sett()
{
    QMessageBox::about(this,"about","connect success");
    connect(p,SIGNAL(readyRead()),this,SLOT(getmsg()));

}
void Dialog::getmsg()
{
    QByteArray tmp = p->readAll();
    QString tmp2(tmp);
    ui->label_2->setText(tmp2);
}
void Dialog::on_pushButton_2_clicked()
{
    QString tmp = ui->lineEdit->text();
p->write(tmp.toLatin1());
}

ui.h

#ifndef UI_DIALOG_H
#define UI_DIALOG_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>

QT_BEGIN_NAMESPACE

class Ui_Dialog
{
public:
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QLabel *label;
    QLineEdit *lineEdit;
    QLabel *label_2;

    void setupUi(QDialog *Dialog)
    {
        if (Dialog->objectName().isEmpty())
            Dialog->setObjectName(QStringLiteral("Dialog"));
        Dialog->resize(400, 300);
        pushButton = new QPushButton(Dialog);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        pushButton->setGeometry(QRect(250, 70, 99, 27));
        pushButton_2 = new QPushButton(Dialog);
        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
        pushButton_2->setGeometry(QRect(250, 170, 99, 27));
        label = new QLabel(Dialog);
        label->setObjectName(QStringLiteral("label"));
        label->setGeometry(QRect(120, 30, 181, 17));
        lineEdit = new QLineEdit(Dialog);
        lineEdit->setObjectName(QStringLiteral("lineEdit"));
        lineEdit->setGeometry(QRect(60, 170, 141, 27));
        label_2 = new QLabel(Dialog);
        label_2->setObjectName(QStringLiteral("label_2"));
        label_2->setGeometry(QRect(50, 70, 181, 31));

        retranslateUi(Dialog);

        QMetaObject::connectSlotsByName(Dialog);
    } // setupUi

    void retranslateUi(QDialog *Dialog)
    {
        Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0));
        pushButton->setText(QApplication::translate("Dialog", "connect", 0));
        pushButton_2->setText(QApplication::translate("Dialog", "send", 0));
        label->setText(QApplication::translate("Dialog", "client", 0));
        label_2->setText(QString());
    } // retranslateUi

};

namespace Ui {
    class Dialog: public Ui_Dialog {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_DIALOG_H
时间: 2024-12-14 09:19:17

qt中的tcp编程的相关文章

QT中的SOCKET编程(QT-2.3.2)

转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 http://hi.baidu.com/landuochong/blog/item/08268100cf5b6783e950cda9.html 操作系统:ARM-LinuxQT版本:QT-2.3.2-FOR-LINUXGUI:Qtopia 在LINUX 下进行网络编程,我们可以使用LINUX提供的统

(73课)Qt中的多线程编程(一)

一.Qt中通过QThread直接支持多线程 1.QThread是一个跨平台的多线程解决方案 2.QThread以简洁易用的方式实现多线程编程 注意:1.Qt中的线程以对象的形式被创建和使用 2.每一个线程对应着一个QThread对象 QThread这个类,是一个线程父类,我们需要继承这个QThread类. QThread类,提供了一组成员函数.一个线程是以一个对象的形式来表现出来,所以说,我们创建一个 线程的时候,实际上就是创建了一个这个QThread线程类的对象 一个线程对应一个QThread

python中的TCP编程学习

今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送数据 第四步:读取从server发送过来的数据 第五步:关闭连接 第六步:对收到的数据进行处理 以下为python的TCP编程的client程序的一个小样例.java中关于网络编程的博文请看这里 #coding:utf-8 #TCP编程的client程序 #编写client程序与其他语言(比如jav

Qt中的多线程编程

http://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/ Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功能.为了满足用户构造复杂图形界面系统的需求,Qt 提供了丰富的多线程编程支持.从 2.2 版本开始,Qt 主要从下面三个方面对多线程编程提供支持:一.构造了一些基本的与平台无关的线程类:二.提交用户自定义事件的 Thread-safe 方式:三.多种线程间同步机制,如信号量,全局锁.这些都给用户提供

第73课 Qt中的多线程编程

1. QThread类 (1)QThread是一个跨平台的多线程解决方案 (2)QThread以简洁易用的方式实现多线程编程 2. QThread中的关键成员函数 (1)virtual void run() :线程函数,用于定义线程功能(执行流). (2)void start():启动函数,将线程入口地址设置为run函数.启动线程,新线程开始执行run函数. (3)int exec():进入事件循环,直至调用exit().返回线程退出事件循环的返回码. (4)void terminate():强

5.关于QT中的网络编程,QTcpSocket,QUdpSocket

?? 1 新建一个项目:TCPServer.pro A  改动TCPServer.pro,注意:假设是想使用网络库.须要加上network SOURCES += \ TcpServer.cpp \ TcpClient.cpp HEADERS += \ TcpServer.h \ TcpClient.h QT += gui widgets network CONFIG += C++11 B 新建例如以下文件,由于要用到网络库,所以加上network C 编写IP选择下拉选,头文件ChooseInt

Qt 多线程和网络编程学习

一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run()函数是在start()函数调用之后开始执行 QMutex类,互斥量/互斥锁,加锁解锁,原子操作 QWaitCondition类,一个线程在一定条件下等待其它线程的唤醒,在此之前一直处于休眠期.QWaitCondition::wakeOne()随机唤醒一个等待的线程,QWaitCondition::

用java网络编程中的TCP方式上传文本文件及出现的小问题

自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端. 客户端: 1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.io.IOException; 4 import java.io.InputStr

关于网络编程中MTU TCP UDP优化设置总结

首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层.  其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} --------------------------------------------------------------------------------- 在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的