qt网络编程-tcp客户端

TCP(传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。

客户端

widget_client.pro

QT       += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = tcp_client
TEMPLATE = app

SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

FORMS    += widget.ui

QMAKE_CXXFLAGS += -std=c++11

widget.ui文件

界面设置

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpSocket>
#include <QTextStream>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;

    //声明套接字 客户端只有一个通信套接字
    QTcpSocket *client;

private slots:
    void btnSendDataSlot();
    void connectedSlot();
    void readReadSlot();
    void disconnectSlot();
};

#endif // WIDGET_H

widget.cpp文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    client = new QTcpSocket(this);

    //设置窗口标记,始终处于顶端
    setWindowFlags(Qt::WindowStaysOnTopHint);
    //设置标题栏文字
    setWindowTitle("client");

    //定义ip地址和端口号
    QString ip = "192.168.102.1";
    int port = 8081;
    //建立连接
    client->connectToHost(ip,port);

    connect(ui->pushButton_send,SIGNAL(clicked()),
            this,SLOT(btnSendDataSlot()));
    connect(client,SIGNAL(connected()),
            this,SLOT(connectedSlot()));


}

Widget::~Widget()
{
    delete ui;
    //断开检测的信号槽
    disconnect(client,SIGNAL(disconnected()),
               this,SLOT(disconnectSlot()));
    //如果打开则关闭
    if(client->isOpen())
        client->close();

}

void Widget::btnSendDataSlot()
{
    //获取用户输入
    QString msg = ui->lineEdit_send->text();
    if(msg == "")
    {
        ui->textBrowser_recv->append("错误,请重新输入");
    }
    //方便下次输入
    ui->lineEdit_send->clear();
    //创建一个文本流对象
    QTextStream output(client);

    output << msg;

}

void Widget::connectedSlot()
{
    //建立读取信息的信号槽连接
    connect(client,SIGNAL(readyRead()),
            this,SLOT(readReadSlot()));
}

void Widget::readReadSlot()
{
    QTextStream input(client);
    QString msg = input.readAll();
    ui->textBrowser_recv->append(msg);
}

void Widget::disconnectSlot()
{
    disconnect(client,SIGNAL(readyRead()),
               this,SLOT(readReadSlot()));
}

本文仅供参考,如有不足之处望多多指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值