因为工作原因,想学习一下编程,最近在学习Qt相关的知识,学到了TCP/IP这里,跟着视频做了一个简单的C/S的小例程.例程中没有关于连接状态的判断.经过修改,可是没能达到我要的效果,在百度上进行搜索,也没有找到关于这种,CSDN中也都是讲解,如果判断与网络的连接状态,于是我重新进行了思考:
在Server端,当我进行断开连接的操作时,可以显示出与客户端连接与断开,但是,如果我在服务端进行断开连接的操作,那么在客户端却显示不出来.再查看QtTCP通信过程的模型图
服务端的流程是:首先启动监听 QTcpServer, listen.然后创建通信套接字QTcpSocket,如果与客户端连接成功,那么服务器端就会触发newConnection(),取出建立好的通信套接字,如果有数据,并发送成功,对方的通信套接字,会触发readyRead()
在客户端,只会用到通信套接字QTcpSocket,首先建立通信套接字,启动连接connectToHost(),如果成功和对方建立好连接,通信套接字会自动触发connected(),如果对方主动断开连接,通信套接字会自动触发disconnected()通过通信套接字的Write(),将数据发送给服务端.
重新理解了一遍流程,那么开始动手修改代码:
1)首先在服务端的窗口事件&QTcpSocket::readyRead,信号的Lamda表达式中,增加&QTcpSocket::disconnected,信号的判断,确定是否与客户端断开连接.
2)在客户端的窗口事件中对&QTcpSocket::disconnected信号进行判断,是否与服务器断开连接.
3)那么如果防止重复点击连接呢?
可以增加一个私有变量conn_sata,初始值为0,表示未连接,以此做为连接状打态,在客户端的窗口事件的QTcpSocket::connected信号进行判断,收到此信号,说明已经连接成功,此时将状态conn_sata的值为1.经过修改后,已经基本实现我想要的效果.

浙公网安备 33010602011771号