从开始学习通信基础到现在,自己一直有点疑惑,通信到底是什么,一个ServerSocket对象+一个Socket对象+通信协议吗?要是是这样,那么自己又卡在哪了?通过这几天的学习与老师的讲解,回想基础阶段的一些困惑,逐步有了自己对通信学习的一些看法。
1、用底层的眼光去看程序——追本溯源
记得以前基础阶段在学习IO的时候自己倍感纠结,什么文件流啊,数据流,缓冲流等等都绕在一起,其实现在看来无非是自己的一个观念转变不过来而已,就拿画板来说,我们熟悉的是一条直线(Line类的对象),一个圆(Oval类的对象),这些在人地惯性思维里是一个具体的概念,所以操作起来很是直观方便。但是到了画板保存的时候就变成了一个一个枯燥的字节了,另人索然无味。
程序是由数据+算法构成的,因此,上述的什么直线呀,圆呀,就其根本来说都是由一个一个字节组成的,所以当我们看到这些基本的单位时,或许就很不适应了吧,以为难度大了,殊不知我们只是去操作更基本的东西,而就操作的对象来说要求是降低了,因为只需要面对一个一个最基本的字节,但是难在哪里?我个人认为,难是难在,首先如何将这些字节组织起来的方法,换句话说,我们怕的只是一些看起来比较复杂的规则而已;其次,我们总想把东西具体化了,一条线,一个圆。缺乏一种抽象的思维,当这些东西变成字节后我们便不适应了,认不出了。
2、对通信学习的看法——才始送春归,又送君归去
为什么这么说呢?一开始在学习通信的时候感觉比较疑惑,因为新的东西并不多啊,就是多要创建两个对象ServerSocket和Socket,书上的代码看着也淋漓精致,但是除了羡慕与赞叹老师程序框架的合理性以及设计的严谨性之外,自己却无所作为。通信的关键到底在什么地方?这个阶段自己到底应该学些什么东西呢?
记得上面所说的画图板的保存吧,最多的感念就是流,而通信里面也离不开流(这里声明是TCP/IP通信协议),所以仔细一想,两者其实有很大的相同之处的。通信其实就是沟通消息,且不论是文本消息还是文件消息,只要想通过计算机来进行传输,那么的话就必须以基本的单位字节来传输。因此,我们其实完全可以将对文本文件这些具体的感念的操作转换成为对字节这一单位的操作,而流就是操作这些字节的工具,但是通信学习又难在哪里?还是那句话,难在规则上,你怎么定义自己的一套规则去传输这些字节,怎么定义一套规则让别人也能够理解,并且按照这个规则能够读出要传送的东西,这其实是很关键的一个问题,拿到现在学习的阶段来说是什么呢?就是通信协议。所以说通信的过程就是制定规则,坚守规则,执行规则的一个过程。
其实想到这里,自己以前的一些困惑也能够得到解答,学会看清数据的本质,将外界的一些具体的东西能够拆分成一个一个字节,然后从简单的创建对象、调用函数到有些难度自定规则、控制字节,这应该是通信学习与基础学习的一个差别吧。往往这些问题,老师只能够提出来,根本上还是需要自身去学习、去提高,毕竟这是能力的一个体现,这也需要自己潜下心去修炼、去体会,不放过每一个细节。
3、这是一个最好的阶段,也是一个最坏的阶段
其实我现在倒觉得通信的学习是最考验人的,首先从客观上来讲,它需要的不仅是去通过协议来组织操作一系列的字节,更重要的是要求我们去转换一种思维模式,从依赖别人的制定的规则去遵守,到自己去定义规则然后去遵守,对我来说,这的确是一个挑战。
为什么说我觉得这是一个最好的阶段?首先,它的基础技术点并不多,让你有充足的时间与精力去对付学习;其次,对于有想法的人来说,这个阶段可发散、可扩展的方向很多,UDP控制传输的实现、组播的实现、对一些软件消息格式的解析、深入学习TCP/IP协议的原理与应用,略举几例,都是很令人热血沸腾的知识。
但是为什么又说是一个最坏的阶段呢?对我来说,需要学会把握知识点与项目之间的关系,最好的当然是做到相互促进。不过我认为,在这一阶段的学习中,需要注意的问题是如何使得项目的含金量更高,换句话说,项目最好是能够展示出自己比较牢固的基础,而不是去掩饰自己知识技能的千疮百孔。所以说,能否把握学习的重点,如何真正的学会自己对一些问题具有学习能力应该是我在通信阶段需要时刻注意的。
外界事物的影响很多,不可能做到与世隔绝,不去受外界的影响,只能是坚定自己认为是值得去做的一些事情,并且坚定不移的做下去。
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
铅酸电池失效仿真comsol
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
springboot124中药实验管理系统设计与实现,含有完整的源码和报告文档
解除劳动合同协议书
快速过滤图像融合Matlab代码.rar
强调图像中内核形状(例如直线)的过滤器Matlab代码.rar
在内网linux服务器安装redis 在Linux环境中离线安装Redis是常见的需求,尤其是在内网服务器上,由于无法直接访问公网,我们需要提前下载Redis的源码包并手动安装。下面将详细解释如何进行这一过程。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
微信小程序StartKitw_xapp-startkit
座位选择微信小程序版本
机械臂代码_Mechanical_arm
图像分割测试视频river-light.mp4
前端分析-2023071100789
labview源码参考示例,可供参考学习使用
MPC跟踪轨迹圆形(以后轴为基准)
MATLAB代码:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词:电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台:MATLAB+CPLEX gurobi平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是一个电动汽车充电管理和智能小区代理商动态定价的问题,将代理商和车主各自追求利益最大化建模为主从博弈,上层以代理商的充电电价作为优化变量,下层以电动汽车的充电策略作为优化变量,通过优化得出最优电价策略以及动态充电策略,代码出图效果非常好,店主已经对代码进行了深入的加工和处理,出图效果非常好,代码质量非常高,保姆级的注释以及人性化的模块子程序,所有数据均有可靠来源,联系后会直接发您资料,保证您学得会,用的起来,简直是萌新福利
springboot154基于Spring Boot智能无人仓库管理,含有完整的源码和报告文档
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作