Qt 的 tcp服务端讲解

TCP

TCP : (Tramsmission Control Protocl)传输控制协议,一种面向连接的,可靠的,基于字节流的传输层通信协议。

本文目标

实现一个简单的服务器,可以接受客户端的信息

使用类库

QTcpServer : 实现服务端的端口监听,可以提供一种服务(也可以自己去编写)。
QTcpSocket : 实现套接字类,有消息的封装,可读取和写入。

接下来介绍两个关于windows的命令行知识

1. netstat -ano

这个命令是针对于windows系统下查看所有的端口占用情况。

  • 首先,cmd 打开命令行窗口,输入netstat -ano,会出现关于本机端口一些连接情况,这快我们主要讲解一下关于TCP的知识
    -Qt 的 tcp服务端讲解_第1张图片
    针对于这块本地地址 0.0.0.0:135

0.0.0.0是表示可以代表任何IP进行访问。
135则表示的是开启的端口

Qt 的 tcp服务端讲解_第2张图片
针对于这块 127.0.0.1:1001

127.0.0.1表示的是自己的网卡地址
1001则表示的是开启的端口号

当然这块如果检查自己电脑网卡是否正常可以 通过 ping 127.0.0.1 来进行检查

2.telnet

Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器

今天我们通过使用 telnet 127.0.0.1 端口号 来测试我们编写的服务端
前提是必须要在windows ,控制面板,程序那块把电脑的telnet client安装上

切入今天的正题,用qt编写一个tcp服务端

Qt 的 tcp服务端讲解_第3张图片
Qt 的 tcp服务端讲解_第4张图片
创建完成后,紧接着,在工程文件中引入network
Qt 的 tcp服务端讲解_第5张图片
第二步,加入类文件,server类
Qt 的 tcp服务端讲解_第6张图片
Qt 的 tcp服务端讲解_第7张图片
Qt 的 tcp服务端讲解_第8张图片
第三步:头文件需要更改server,应该继承 QTcpServer,并且在server的源文件也要更改,如下
Qt 的 tcp服务端讲解_第9张图片
Qt 的 tcp服务端讲解_第10张图片

重点来了

1、首先开启端口服务,使用QTcpServer的listen,开启指定的端口。
这块目的是:外人发过的消息可以被这个程序接收到,并且使用 netstat -ano进行检测。

Qt 的 tcp服务端讲解_第11张图片
Qt 的 tcp服务端讲解_第12张图片
Qt 的 tcp服务端讲解_第13张图片
2、通过重写 incomingConnection( qintptr handle);
让新用户加入进来,这个方法是要引入QTcpSocket类,并且这个方法是虚函数,需要用户去重载

Qt 的 tcp服务端讲解_第14张图片
Qt 的 tcp服务端讲解_第15张图片
这块开始测试,因为小编先写好代码,这块就用原先写好的代码来进行演示
先cmd,使用telnet 127.0.0.1 8888 进行测试

Qt 的 tcp服务端讲解_第16张图片
Qt 的 tcp服务端讲解_第17张图片
3、要将当前对象的连接对象存入socket对象中
Qt 的 tcp服务端讲解_第18张图片
4、监听sock对象的readyread()消息来处理最后的消息。(这块我们要说的是一个函数可以同时继承他父类的方法)

Qt 的 tcp服务端讲解_第19张图片
Qt 的 tcp服务端讲解_第20张图片
5、读取消息,并且通过if语句排除无用字符
Qt 的 tcp服务端讲解_第21张图片

最后整体测试,整个简单的TCP服务端编写完成

Qt 的 tcp服务端讲解_第22张图片
Qt 的 tcp服务端讲解_第23张图片
Qt 的 tcp服务端讲解_第24张图片
最后整体完成,效果还不错。有哪些函数不懂,进入帮助文档里面,有详细的介绍。

你可能感兴趣的:(qt,c++)