前言
当我们输入了账号密码之后点击登录按钮,应该要向服务器发送数据包
选择TCP更适合我们
所以我们需要俩姐Qt中有关网络通信的类
01login.pro文件中需要添加qmake的内容 QT += network
构造函数中需要指定父组件
我们现在需要使用Qt搭建TCP中的C端,我们需要做什么?
肯定是要请求连接,和Server端建立连接之后,就可以发送数据包了
我们在Linux高级编程中,使用的是connect() 函数建立网络连接
但是在Qt中connect() 方法是让信号和槽进行建立连接
我们需要使用connectToHost() 方法建立TCP连接
- 功能:与主机连接
- 可以用QString来指定对端的IP地址
- quint16是端口号
有关写的操作(发送数据)
有关读的操作(接收数据)
那么我们C端如何知晓服务器给我们发包了?
比如:我们填写了账号和密码,点击登录,服务器需要有个反馈,告诉我们能不能登录?
在Linux高级编程中,我们怎么知道套接字有数据到来?
可以使用IO多路转接->selete()\poll()\epoll()
那么在Qt中就要用信号与槽来监听,对于套接字是否可读,是有一个信号的
1.总结
我们需要使用的类是QTcpSocket类
我们需要在.pro文件中加入 QT += network
需要使用的方法:
- 连接服务器 connectToHost()
- 发送数据包 write()/writeData()
- 接收数据包 read()/readData()/readAll()
- 接收到数据产生信号 readyRead()
- 连接成功产生信号 connected()
- 断开连接产生信号 disconnected()
2.C端发S端收
先添加一个protocol.h头文件存放协议
把Linux端写好的TCP的项目工程中protocol.h头文件内的协议粘贴过来(要统一协议)
注意:IP地址需要修改成当前的
注意:Linux下的协议文件和Qt中的协议文件需要保持一致
我们什么时候和服务器通信?应该是点击登录按钮的时候
声明槽函数
接下来实现槽函数以及信号与槽的连接
在槽函数中需要做TCP通信的操作,别忘了包含头文件
别忘了包含协议的头文件
3.S端发送C端接收
S端发送数据,我们的C端如何获取到?
需要用到信号与槽,会产生一个readyread信号
需要如果接收到S端发送回来的数据包,C端需要做分支判断,是否登录成功
用一个QMessageBox类,可以弹出对话框提示登录成功