初学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语言,大二开始就解除了 ...
随机推荐
- -bash: ./mlnxofedinstall: /usr/bin/perl: bad interpreter: No such file or directory
-bash: ./mlnxofedinstall: /usr/bin/perl: bad interpreter: No such file or directory 解决办法:安装相关的环境即可 输 ...
- PHP 阿里云短信验证码的实现
Test.php是测试你的环境是否部署完成 demo里的sendSms.php里修改 // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息$ ...
- django文件目录
例如主站mysite,mysite下有一个应用testapp 1.在mysite/mysite下的settings需要添加应用进去 2.在musite/mysite下的urls.py记录应用的路径 3 ...
- bgp多线互联
BGP(边界网关协议)主要用于互联网AS(自治系统)之间的互联,BGP的最主要功能在于控制路由的传播和选择最好的路由. 中国网通 .中国电信.中国铁通.教育网和一些大的民营IDC运营商都具有AS号,全 ...
- Leecode-每日一题-题目448. 找到所有数组中消失的数字
今天重新开始刷leecode 为了致敬我的偶像,还是选择把做题笔记发在博客园上 题目448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数 ...
- 学习笔记||Vue踩过的坑3.0
11.VUE之const,var,let VUE-var 用var命令声明的变量,是在全局范围内有效的 VUE-let let声明的变量,只是在当前循环的代码块中有效. let不允许在相同的作用域内重 ...
- clamav测试用例 API
最近接触到clamav这一块,本身是一个很简单的任务,只需要调用他的API对文件进行检测即可,但是在进行大量搜索发现,网上最多只有API的讲解,且质量层次不齐,这可为难住我了,作为一个名副其实的&qu ...
- Restful Fast Request 添加前置脚本,实现不同环境免设置token 直接请求
idea安装Restful Fast Request插件后,进行如下设置,并打开 项目全局参数 对话框 进入前置脚本 tab 编写如下groovy脚本代码(插件脚本语言默认支持groovy,该语言被称 ...
- ST能维护的性质
总结: 其实ST表不仅能处理最大值/最小值,凡是符合结合律且可重复贡献的信息查询都可以使用ST表高效进行.什么叫可重复贡献呢?设有一个二元运算 ,满足 ,则是可重复贡献的.显然最大值.最小值.最大 ...
- C语言历史与C++的区别
前期演变: C语言的前身是1967年由Martin Richards为开发操作系统和编译器而提出的两种高级程序设计语言BCPL和B.BCPL.Ken Thompson在BCPL的基础上,提出了新的功能 ...