QT网络编程: 实现TCP通讯设置(服务端)

本文详细介绍了如何在Qt中设计UI界面,并通过QTcpSocket和QTcpServer创建TCP通信,包括添加网络模块、编写头文件、定义槽函数、监听端口及处理客户端连接。代码示例展示了从头到尾的开发过程。
摘要由CSDN通过智能技术生成

目录

一.widget.ui界面设计

二.创建TCP通信

1.pro文件添加network模块。

2.添加对应头文件

3.定义槽函数

4.定义类的私有成员

5.定义服务器监听的端口

6.监听TCP端口

7.建立TCP连接

8.效果图

三.代码演示

1.h头文件

2.cpp文件

3.widget.ui文件


一.widget.ui界面设计

拖拽左侧Label控件到页面中,分别显示Label:服务器;Label:客户端地址;Label:客户端窗口号;Label:收到的信息。

拖拽左侧Line Edit控件到页面中,在右侧将其objectName 设置为"ipLineEdit"; "portLineEdit"; "mainLineEdit",目的是显示客户端地址和客户端端口号和收到的信息。

二.创建TCP通信

1.pro文件添加network模块。

2.添加对应头文件

#include <QTcpSocket>:QTcpSocket 是 Qt Network 模块的一部分,它提供了一个 TCP(Transmission Control Protocol)客户端和服务器的接口,用于在应用程序中进行网络通信,如创建套接字、发送和接收数据、处理连接和断开等。

#include <QTcpServer>:QTcpServer类用于创建TCP服务器,允许您监听和处理传入的TCP连接请求。

3.定义槽函数

void newClientHandler();:这个函数用来处理新连接的客户端,需要创建一个新线程来处理客户端的请求。

4.定义类的私有成员

QTcpServer *server; 定义了一个QTcpServer类型的指针,用于创建和管理TCP服务器。

5.定义服务器监听的端口

6.监听TCP端口

server = new QTcpServer;:创建一个新的QTcpServer对象,用于创建和管理TCP服务器。

server->listen(QHostAddress::AnyIPv4,PORT);:调用listen函数,开始监听TCP端口,允许客户端连接。

connect(server,&QTcpServer::newConnection,this,&Widget::newClientHandler);:使用Qt的信号和槽机制,在客户端发起连接时,调用newClientHandler函数。

7.建立TCP连接

通过server->nextPendingConnection()建立了一个TCP连接,并将返回的QTcpSocket指针存储在socket中。

使用socket->peerAddress()socket->peerPort()分别获取了客户端的IP地址和端口号。

8.效果图

三.代码演示

1.h头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>


#define PORT  8000

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
   // Q_OBJECT

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

private:
    Ui::Widget *ui;
    QTcpServer *server;

private slots:
    void newClientHandler();

};

#endif // WIDGET_H

2.cpp文件

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

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

    server = new QTcpServer;

    server->listen(QHostAddress::AnyIPv4,PORT);

    //客户端发起连接,server发出信号
    connect(server,&QTcpServer::newConnection,this,&Widget::newClientHandler);
}


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

void Widget::newClientHandler()
{
    //建立tcp连接
    QTcpSocket *socket = server->nextPendingConnection();
    socket->peerAddress(); //获取客户端的地址
    socket->peerPort();    //获取客户端的端口号


    ui->ipLineEdit->setText(socket->peerAddress().toString());
    ui->portLineEdit->setText(QString::number(socket->peerPort()));

}



3.widget.ui文件

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值