TCP/IP客户端和服务器端建立通信过程

这篇具有很好参考价值的文章主要介绍了TCP/IP客户端和服务器端建立通信过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

客户端和服务器端建立通信过程

TCP/IP客户端和服务器端建立通信过程,Qt,tcp/ip,网络协议,网络

使用Qt提供的类进行基于TCP的套接字通信需要用到两个类:

QTcpServer:服务器类,用于监听客户端连接以及和客户端建立连接。
QTcpSocket:通信的套接字类,客户端、服务器端都需要使用。

服务器端QTcpServer

QTcpServer类用于监听客户端连接以及和客户端建立连接,在使用之前先介绍一下这个类提供的一些常用API函数:

公共成员函数

构造函数

QTcpServer::QTcpServer(QObject *parent = nullptr)

给监听的套接字设置监听listen()函数

bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);

在代码中通过启动监听按钮设置监听

//启动监听服务
void MainWindow::on_setListen_released()
{
    unsigned short port =ui->port->text().toUShort();
    m_server->listen(QHostAddress::Any,port);
    ui->setListen->setDisabled(true);//

}

参数:

  • address:通过类QHostAddress可以封装IPv4IPv6格式的IP地址,QHostAddress::Any表示自动绑定。
  • port:如果指定为0表示随机绑定一个可用端口。 返回值:绑定成功返回true,失败返回false

判断当前对象是否在监听, 是返回true,没有监听返回false

bool QTcpServer::isListening() const;

如果当前对象正在监听,返回监听的服务器地址信息, 否则返回 QHostAddress::Null

QHostAddress QTcpServer::serverAddress() const;

如果服务器正在侦听连接,则返回服务器的端口; 否则返回0

quint16 QTcpServer::serverPort() const

服务器端QTcpSocket

QTcpSocket是一个套接字通信类,不管是客户端还是服务器端都需要使用。在Qt中发送和接收数据也属于IO操作(网络IO),先来看一下这个类的继承关系:




TCP/IP客户端和服务器端建立通信过程,Qt,tcp/ip,网络协议,网络

得到和客户端建立连接之后用于通信的QTcpSocket套接字对象,它是QTcpServer的一个子对象,当QTcpServer对象析构的时候会自动析构这个子对象,当然也可自己手动析构,建议用完之后自己手动析构这个通信的QTcpSocket对象。

QTcpSocket *QTcpServer::nextPendingConnection();

阻塞等待客户端发起的连接请求,不推荐在单线程程序中使用waitForNewConnection(),建议使用非阻塞方式处理新连接,即使用信号 newConnection()

bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = Q_NULLPTR);

参数:

  1. msec:指定阻塞的最大时长,单位为毫秒(ms);
  2. timeout:传出参数,如果操作超时timeouttrue,没有超时timeoutfalse

套接字通信的过程中的信号

1.在使用QTcpSocket进行套接字通信的过程中,如果该类对象发射出readyRead()信号,说明对端发送的数据达到了,之后就可以调用 readAll ()函数接收数据了。

[signal] void QIODevice::readyRead();

官方解释

This signal is emitted once every time new data is available for reading from the device's current read channel. It will only be emitted again once new data is available, such as when a new payload of network data has arrived on your network socket, or when a new block of data has been appended to your device

2.调用connectToHost()函数并成功建立连接之后发出connected()信号。

[signal] void QAbstractSocket::connected();

3.在套接字断开连接时发出disconnected()信号。

[signal] void QAbstractSocket::disconnected();

TCP/IP客户端和服务器端建立通信过程,Qt,tcp/ip,网络协议,网络

TCP/IP客户端和服务器端建立通信过程,Qt,tcp/ip,网络协议,网络

TCP/IP客户端和服务器端建立通信过程,Qt,tcp/ip,网络协议,网络

接收数据

// 指定可接收的最大字节数 maxSize 的数据到指针 data 指向的内存中
qint64 QIODevice::read(char *data, qint64 maxSize);
// 指定可接收的最大字节数 maxSize,返回接收的字符串
QByteArray QIODevice::read(qint64 maxSize);
// 将当前可用操作数据全部读出,通过返回值返回读出的字符串
QByteArray QIODevice::readAll();

发送数据文章来源地址https://www.toymoban.com/news/detail-731945.html

// 发送指针 data 指向的内存中的 maxSize 个字节的数据
qint64 QIODevice::write(const char *data, qint64 maxSize);
// 发送指针 data 指向的内存中的数据,字符串以 \0 作为结束标记
qint64 QIODevice::write(const char *data);
// 发送参数指定的字符串
qint64 QIODevice::write(const QByteArray &byteArray);

到了这里,关于TCP/IP客户端和服务器端建立通信过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《TCP/IP网络编程》阅读笔记--基于UDP的服务器端/客户端

    目录 1--TCP和UDP的主要区别 2--基于 UDP 的数据 I/O 函数 3--基于 UDP 的回声服务器端/客户端 4--UDP客户端Socket的地址分配 5--UDP存在数据边界 6--UDP已连接与未连接的设置 ① TCP 提供的是可靠数据传输服务,而 UDP 提供的是不可靠数据传输服务; ② UDP 在结构上比 TCP 更简洁,其不会

    2024年02月09日
    浏览(61)
  • socket的使用 | TCP/IP协议下服务器与客户端之间传送数据

    谨以此篇,记录TCP编程,方便日后查阅笔记 注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。 服务器端代码: 客户端代码: 运行后结果: 服务器端: 客户端: 参考资料: https://www.bilibili.com/vid

    2024年02月09日
    浏览(60)
  • 《TCP/IP网络编程》阅读笔记--基于Windows实现Hello Word服务器端和客户端

    目录 1--Hello Word服务器端 2--客户端 3--编译运行 3-1--编译服务器端 3-2--编译客户端 3-3--运行 运行结果:

    2024年02月10日
    浏览(65)
  • 【无标题】TCP,UDP,DNS以及配置网关IP地址和在ensp中,在客户端用域名或IP地址获取服务器的文件的实验

    PDU:协议数据单元 应用层:数据报文 传输层:数据段 网络层:数据包 数据链路层:数据帧 物理层:比特流(电流)   应用层的常见协议: HTTP----基于TCP协议 占据80端口号 超文本传输协议 HTTPS----基于TCP协议 占据443端口号 安全传输协议 SSH----基于TCP协议 占据22端口号 安全外

    2024年02月04日
    浏览(53)
  • FPGA实现10G万兆网TCP/IP 协议栈,纯VHDL代码编写,提供服务器和客户端2套工程源码和技术支持

    目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上板调试跑通的项目更是少之又少,甚至可以说是凤毛菱角,但很不巧,本人这儿就有一个; 本设采用纯VHDL实现了10G万兆网TCP/IP协议栈,该协议栈分为TCP服务器核客户端,没有使

    2024年02月09日
    浏览(65)
  • QT实现tcp服务器客户端

    2024年02月07日
    浏览(58)
  • Qt 服务器/客户端TCP通讯

    最近需要用到TCP/IP通讯,这边就先找个简单的例程学习一下。Qt的TCP通讯编程可以使用QtNetwork模块,QtNetwork模块提供的类能够创建基于TCP/IP的客户端与服务端应用程序,一般会使用QTcpSocket、QTcpServer类 网络通信方式主要有两种:TCP与UDP。以下拷贝网络上总结两者之间的区别:

    2023年04月26日
    浏览(69)
  • TCP实现服务器和客户端通信

    目录 TCP介绍 代码实现 server(服务器端) 代码分析 client(客户端) 代码分析 结果展示 TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传输数据。TCP 可以确保数据的可靠传输,即使在网络环境不稳定的情况下也能够保证数据的完整性和顺序。以下是

    2024年02月15日
    浏览(61)
  • 【Micropython基础】TCP客户端与服务器

    MicroPython 是 Python 的一种精简实现,旨在运行于微控制器和嵌入式系统等资源受限的环境中。它提供了一种简单而强大的方式来编写和运行 Python 代码,使开发人员能够快速地创建各种嵌入式应用程序。 在嵌入式系统中,网络通信是一个常见的需求,而 TCP(传输控制协议)是

    2024年04月28日
    浏览(42)
  • 简易TCP客户端和服务器端通信

    #includeiostream #include winsock2.h   #include ws2tcpip.h   #includestdlib.h using namespace std; #define  BUF_SIZE  1024 int main() {     cout \\\"客户端\\\" endl;     //设置Winsock版本,     WSADATA   wsaData;     if (WSAStartup(MAKEWORD(2, 2), wsaData) != 0)     {         cout \\\"error\\\" endl;         exit(1);     }     //创建通

    2024年04月29日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包