TCP
TCP : (Tramsmission Control Protocl)传输控制协议,一种面向连接的,可靠的,基于字节流的传输层通信协议。
本文目标
实现一个简单的服务器,可以接受客户端的信息
使用类库
QTcpServer : 实现服务端的端口监听,可以提供一种服务(也可以自己去编写)。
QTcpSocket : 实现套接字类,有消息的封装,可读取和写入。
接下来介绍两个关于windows的命令行知识
1. netstat -ano
这个命令是针对于windows系统下查看所有的端口占用情况。
- 首先,cmd 打开命令行窗口,输入netstat -ano,会出现关于本机端口一些连接情况,这快我们主要讲解一下关于TCP的知识
-
针对于这块本地地址 0.0.0.0:135
0.0.0.0是表示可以代表任何IP进行访问。
135则表示的是开启的端口
针对于这块 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服务端
创建完成后,紧接着,在工程文件中引入network
第二步,加入类文件,server类
第三步:头文件需要更改server,应该继承 QTcpServer,并且在server的源文件也要更改,如下
重点来了
1、首先开启端口服务,使用QTcpServer的listen,开启指定的端口。
这块目的是:外人发过的消息可以被这个程序接收到,并且使用 netstat -ano进行检测。
2、通过重写 incomingConnection( qintptr handle);
让新用户加入进来,这个方法是要引入QTcpSocket类,并且这个方法是虚函数,需要用户去重载
这块开始测试,因为小编先写好代码,这块就用原先写好的代码来进行演示
先cmd,使用telnet 127.0.0.1 8888 进行测试
3、要将当前对象的连接对象存入socket对象中
4、监听sock对象的readyread()消息来处理最后的消息。(这块我们要说的是一个函数可以同时继承他父类的方法)
5、读取消息,并且通过if语句排除无用字符
最后整体测试,整个简单的TCP服务端编写完成
最后整体完成,效果还不错。有哪些函数不懂,进入帮助文档里面,有详细的介绍。