Qt实现简单的Socket通信---客户端

首先搞定服务端,这里YTNetWork作为Socket服务端使用,其他的软件也是可以的,点击启动即可

Qt实现简单的Socket通信---客户端_第1张图片

下面正式进入主题,开发socket 客户端

新建一个Qt的项目 选择QWidget,创建界面如下:

Qt实现简单的Socket通信---客户端_第2张图片

包含了3个控件,2个TextEdit 分别存放 客户端的收的信息 和 发的消息
还有一个button 点击的时候把发送消息发送出去。

在项目管理文件中添加网络支持

QT       += core gui network

然后在是widget中的代码:

#include "widget.h"
#include "ui_widget.h"
#include 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

   client = new QTcpSocket(this);
   client->connectToHost(QHostAddress("127.0.0.1"), 8080);

    connect(client,&QIODevice::readyRead ,[=](){
        char* data=new char[1024];
        client->readLine(data,1024);
        ui->textEdit->setText(QString(data));
    });

}

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


void Widget::on_pushButton_clicked()
{
    QString  data=ui->textEdit_2->toPlainText();
    QByteArray ba = data.toLocal8Bit();  // 防止中文乱码
    client->write(ba);
}

其中创建了一个button点击的槽函数 on_pushButton_clicked() ,这个函数的功能就是发送消息

另外为接收socket处理创建了一个槽函数。

  connect(client,&QIODevice::readyRead ,[=](){
        char* data=new char[1024];
        client->readLine(data,1024);
        ui->textEdit->setText(QString(data));
    });

一开始比较好奇为什么不直接读取了,搞了一个类似回调函数的感觉,后来一想因为不能阻塞界面啊 , 桌面软件 用户ui必须要响应及时啊。哈哈 是不是有点前端ajax的味道了 。异步的javascript。

ok 一切搞定后启动程序开始测试

输入消息,点击发送 服务端收到了消息

服务端输入消息,点击发送

ok了,总体而言还是比较简单的。

你可能感兴趣的:(Qt,qt,socket)