初学TCP的一些感想
因为工作原因,想学习一下编程,最近在学习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.经过修改后,已经基本实现我想要的效果.

初学TCP的一些感想的更多相关文章
- 动手学TCP——CS144实验感想
在Stanford CS144的课程实验Lab0~Lab4中,我们动手实现了一个自己的TCP协议,并且能够真的与互联网通信!此外,感谢Stanford开源本实验并提供了大量的优质测试用例,使得我们仅仅 ...
- TCP/IP之四书五经[转自2003.12程序员]
TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要.从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架( ...
- TCP/IP的经典网络编程
TCP/IP网络编程之四书五经 ...
- TCP/IP详解卷1 - wireshark抓包分析
TCP/IP详解卷1 - 系列文 TCP/IP详解卷1 - 思维导图(1) TCP/IP详解卷1 - wireshark抓包分析 引言 在初学TCP/IP协议时,会觉得协议是一种很抽象的东西,通过wi ...
- TCP随笔
目录 前言 正文 time_wait和rst fin与连接关闭 nagel和ack延迟算法 滑动窗口与拥塞控制 文末 总结 测试代码 前言 网上已经有大量关于tcp的文章,感觉作为一名技术人员,不写一 ...
- windows类书的学习心得(转载)
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- windows类书的学习心得
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- 初学acm感想
初学acm,觉得大部分题对我来说都是陌生的,好多类型没见过,好多题没思路,打击确实不小,或许这个阶段正是比较能考验人的时候吧,因为只有坚持下来才有收获,没有人生下来就是大神,所以不能气馁更不能放弃,有 ...
- 初学C的感想
既然是随笔,那就让我谈谈或者说聊聊自己的感想吧.刚刚进入大学的时候,对物联网工程这个专业挺迷茫的,至少我不知道自己将要学什么,只知道高数和英语是一定要学的,后来听学长说要学C语言,对这个概念很陌生,有 ...
- 201671010147 2017年8月27号 初学java的感想
在IT行业中,java无疑是最热门的,很多企业也青睐java,因为他的扩展性好,可以处理更多客户的数据,正是因为java有前景所以才吸引更多人去学习.在大一我们已经接触vhleC语言,大二开始就解除了 ...
随机推荐
- Vue 的生命周期 详细解析(使用场景等)
Vue生命周期图: 一.生命周期图的解读 new Vue():首先需要创建一个 Vue的实例对象 Init Events & Lifecycle :初始化:生命周期.事件(如:v-once), ...
- URAL2127 Determinant of a Graph 题解
这个题真的折磨了我超久的.全网几乎搜不到一个详细的题解,俺来写写吧. 题意:给你一个无自环无重边的连通无向图,求它邻接矩阵的行列式的值. \(n\le 2*10^5,n-1\le m \le n+50 ...
- 睿爸信奥-【临阵磨枪】练习赛(第二场)- T2
目录 题面 code 题面 徐老师在[睿爸信奥]里面颇受学生欢迎,有一天校长石老师想要搞个最受欢迎老师投票,徐老师就很想拿到这个奖.假设有 名候选者,有 人参加了投票,与以往不同的是,这次所有得票数超 ...
- 项目中pom.xml的某些坐标无法加载
项目中pom.xml的某些坐标无法加载 maven官方查找对应的坐标文件下载 https://mvnrepository.com/artifact/com.fasterxml.jackson.core ...
- kubernetes 报错The connection to the server localhost:8080 was refused - did you specify the right host or port?
The connection to the server localhost:8080 was refused - did you specify the right host or port? 环境 ...
- HDFS学习记录
HDFS 1.hdfs整体工作机制: 1>hdfs:分布式文件系统. hdfs:分布式文件系统 hdfs有着文件系统共同的特征: 2>有目录结构,顶层目录是: / 3>系统中存放的 ...
- Unity 设计模式-简单工厂模式和其他好用的通用代码块
1. 2.加法操作类 using System.Collections; using System.Collections.Generic; using UnityEngine; //加法操作类 pu ...
- NavicatPremium16破解!!!!!亲测可用!!!!!!!!!!!!!!!!!
前言 Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让 ...
- mongodb删除指定字段
db.getCollection('geoServer').update({},{$unset:{longitude:null,latitude:null}},{ multi: true}) 实测有效 ...
- 计算机网络复习小结(3)-IPv4
IPv4分组 一个IP分组由首部和数据两部分组成,首部前一部分的长度固定,共20B,是所有IP分组必须具有的.在IP数据报首部中有三个关于长度的标记,一个是首部长度,一个是总长度,一个是片偏移,基本单 ...