QT tcpsocket与tcpserver通信

服务器端程序


#include "tcpserver.h"
#include "ui_tcpserver.h"
#include<QTcpServer>
#include<QTcpSocket>
#include<QString>
tcpserver::tcpserver(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::tcpserver)
{
   
//服务器端程序
 ui->setupUi(this);
    server=new QTcpServer(this);
    quint16 port=8888; //设置端口
    server->listen(QHostAddress::Any,port); //设置监听主机ip与端口
    connect(server,&QTcpServer::newConnection, //连接成功自动调用
 
 
            [=]()
    {
 
 
        socket= server->nextPendingConnection();  //取套接字
        QString ip=socket->peerAddress().toString();
         quint16 port=socket->peerPort();
        ui->textEditRead->setText(QString("[%1:%2]连接成功!").arg(ip).arg(port));
        connect(socket,&QTcpSocket::readyRead,
                [=]
        {
            char* data;
            data=socket->readAll().data();//以字节数组形式全部读取,后转char*
            ui->textEditRead->append(data); //追加
    
        }
                );
 
 
 
 
    }
    );
 
 
}
 
 
tcpserver::~tcpserver()
{
    delete ui;
}
 
 
void tcpserver::on_buttonSend_clicked()
{
   QString data=ui->textEditWrite->toPlainText();
    socket->write(data.toUtf8().data());//写数据注意格式转换
}
 
 
void tcpserver::on_buttonClose_clicked()
{
  socket->disconnectFromHost();//断开连接
  socket->close();//关闭
}

客户端程序:

#include "tcpsocket.h"
#include "ui_tcpsocket.h"
#include<QTcpSocket>
#include<QString>
#include <QHostAddress>
#include<QDebug>
//#define cout qDebug();
tcpsocket::tcpsocket(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::tcpsocket)
{
    ui->setupUi(this);
 
 
    socket =new QTcpSocket;
  ui->lineEditIp->setText(QString("127.0.0.1"));//设置ip地址
  ui->lineEditPort->setText(QString("8888"));//端口号
    connect(socket,&QTcpSocket::readyRead, //当接收信息后自动调用,准备读
           [=]()
       {
 
 
       char* data;
       data=socket->readAll().data();//一次性读取
       ui->textEditRead->append(data); //内容追加
       }
           );
    connect(socket,&QTcpSocket::connected,
            [=]
    {
        ui->textEditRead->setText(QString("连接成功!"));
 
 
    });
 
 
}
 
 
tcpsocket::~tcpsocket()
{
    delete ui;
}
 
 
void tcpsocket::on_buttonSend_clicked()
{
    QString data=ui->textEditWrite->toPlainText(); //获取写的内容
     socket->write(data.toUtf8().data());
}
 
 
void tcpsocket::on_buttonClose_clicked()
{
 
 
    socket->disconnectFromHost();
    socket->close();
 
 
}
 
 
void tcpsocket::on_buttonconnect_clicked()  //创建连接
{
    ip=ui->lineEditIp->text();
    port=ui->lineEditPort->text().toInt();
    socket->connectToHost(QHostAddress(ip),port); //
 
 
}


主程序:

#include "tcpserver.h"
#include "tcpsocket.h"
#include <QApplication>
#define QT_FATAL_WARNINGS
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    tcpserver w;
    w.show();
    w.setWindowTitle("服务器端");
    tcpsocket w2;
    w2.show();
    w.setWindowTitle("客服端");
    return a.exec();
}
 
 

qt tcp基本通信原理:

1.客户端设置:

  socket->connectToHost(QHostAddress(ip),port); //与其他主机建立联系
通过connected判断是否连接成功

接收信息通过信号readyread操作,再使用readall读取信息

发送直接使用write;

2.服务器端:

建立服务器对象,设置监听对象

用newconnection判断是否连接成功

接收信息通过信号readyread操作,再使用readall读取信息

发送直接使用write;


 

猜你喜欢

转载自blog.csdn.net/qq_40239482/article/details/79934506