浅谈如何学习网络编程

如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境 在云端环境编写 ABAP 代码会遇到一些限制,比如你无法在云端 ABAP 编程环境进行发生在传统 SAPGUI 里的 Dynpro 和 Screen 编程。部分在 SAPGUI 里使用的 List 处理相关的关键字比如 WRITE,还有 CALL TRANSACTION 等代码,也无法在云端使用。 当然如果大家觉得上面提到的这些限制不会影响自己的 ABAP 学习,就可以继续本文的阅读,使用 ABAP Development Tool 登录云端的 ABAP 编程环境。 阅读详情

    如何学习网络编程?这是我的经验之谈,我从来就没有系统的学习过网络编程(非科班么),学习过程中走了不少弯路。最近在读经典的《Linux程序设计(第3版)》,第十五章讲的是套接字Socket编程,读完之后,产生了一些想法,觉得有必要写下来。

学习网络编程我遇到的主要两个困惑是: 
    第一:计算机网络中的一个个协议都是抽象的,怎么和具体实际结合起来呢?  
    第二:知道了socket编程的一般步骤后,如何能够写成复杂的服务器程序?(如Web服务器)

我的学习过程是这样子的:
  ●先是利用WinInet函数库写了几个简单的网络应用程序:简易登录、查询新书RSS等;了解了HTTP协议的一些内容。 
  ●后来又看了孙鑫的VC视频教程,image ,虽然照着视频能够写出实例代码来,但是仅仅是会用,其中很多原理都不理解,比如说WSA开头的异步函数,Winsock2对socket的一些增强或者改进等。 

  ●后来是一边上《计算机网络》的课,一边读《C++网络编程》。通过计算机网络课我知道了所谓的协议分析是怎么一回事情,通过wireshark抓包分析,“协议”就如同这个词本身意思是一样的,是通信过程中的一种约定,规定了数据包中的每个或每几个字节代表了什么意思;  

  ●至于《C++网络编程》,十分惭愧,我最大的收获不是如何进行网络编程,而是ACE框架的设计原则,通过实际的例子明白了设计模式是怎么一回事情,可以去我的豆瓣书评 看看。 
 
● 再后来,偶然的发现了《计算机网络高级编程技术》,我初略的翻了翻,看到里面的基础、提高、综合训练篇、突然反应过来:socket和操作系统提供的系统调用,基本上都是C语言接口的,协议字段的具体表现,不就是用结构体吗?协议中的几个字节代表什么与C语言基本数据类型就能对应了起来(-_-!这是缺少实践造成的迟钝啊)。

  ●再后来,了解了下Boost.asio,Java的MINA框架,这些都是异步I/O前摄器模式的实现,当然还有ACE_Proactor

  ●再后来由于参加比赛的需要,飞快的阅读了《深入理解MySQL核心技术》和Linux程序设计(第3版)》,就这样从把整个知识体系都联系起来,从socket到完整网络服务器程序,我的网络编程才算正式进入了门道。

所以,正常的学习路径应该是:C/C++语言 -->>计算机网络 -->>协议分析 -->>BSD Socket、OS API ( fork()、pthread_create()、select() ) -->>Reactor、Proactor模式

在这个过程我的体会是,最好是从Linux下或者Unix底下学习,比起Windows,Linux的编程接口设计更很简洁,使用的基本上都是标准的数据类型,很多源代码是开放的,而且我比较习惯于看小写的英文单词。。。我发现,如果最一开始能够从整体上了解网络编程的全景,就会知道应该学习什么,下一步该学什么,循序渐进才是好的学习方法。

我所理解的“全景”:

--计算机网络种类有很多种:ATM、X.25、Internet(大大小小的局域网互联而成,以太网、令牌网等等)

---- Internet通信的协议也有很多种,其中最核心的是TCP/IP协议

---- 网络编程接口也有很多种,BSD UNIX提出了socket,是一种通信机制,是管道概念的扩展

-------- socket有三种属性:域(或协议族)、类型、协议

-------- 最常用的协议族有AF_UNIX和AF_INET(对应现在的Internet),AF_INET的类型又有两种:数据流(tcp)和数据报 (udp)

------------ 在<sys/types.h>和<sys/socket.h>定义了socket编程的系统调用:socket()、struct sockaddr、bind()、listen()、accept()、connect()、close()、sendto()、recvfrom()

------------ 其中bind()是用来给创建的socket命名的,如果是AF_UNIX会关联到文件系统的一个路径上,如果是AF_INET则会绑定到IP的端口号上;listen()用来保存未处理的客户请求的队列;accept()等待客户端的连接,会创建新的socket用来处理客户端连接。

------------ 由于历史原因,不同的计算机使用不同的字节序来表示整数,Intel和Motorola的处理器的字节序就不一样,所以要转换为网络序(好像Unicode中的Little-Endian、Big-Endian也是这么个情况。。)

------------ 服务器必然为多客户服务的,为了提高运行效率,高效利用系统资源,就出现多进程、多线程的服务端程序,这就需要用到fork()和pthread_create()了,再往下就是select()、pull()等多路复用和异步I/O机制了。

----------------为了简化网络应用程序的开发,增加代码的复用性、扩展性、可谓性;出现了Reacotr、Preactor等设计模式,出现了ACE、Boost.asio等框架、进一步简化网络开发的难度,出现了WinInet、libcurl这样的面向应用层的函数库。

最后我试着回答最开始的两个问题:

    第一:描述协议基本上是C/C++中的结构体、协议中规定的多少字节代表什么,对应中C/C++中的标准数据类型。这是因为操作系统基本上都是用C语言编写的,提供的接口也是C语言的接口。上层的一些协议如HTTP、SOAP、XMPP基本上纯文本的,字符串就能表示。

    第二:复杂的服务器程序复杂之处在于对高性能、执行效率的要求,这就需要利用操作系统提供的一些机制,比如多进程、多线程、原生支持的异步I/O机制。针对软件开发的复用性等要求,需要利用面向对象的设计思想,分层的思想、设计模式等。

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系! 在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 阅读详情

相关推荐

量子城域网建设设备系列(三):网络管理系统(NMS)

本文对量子网络中的网络管理系统进行了初步的介绍。

量子领域相关话题 2012

网络编程基础知识(学网编看它就够了)

通俗易懂描述网络编程基本知识。并且给出源代码。

qq_57392653的博客 1万+

手把手教你学Simulink--双足机器人分数阶PID控制仿真

分数阶PID(Fractional-order PID, FOPID)控制是一种先进的控制策略,它扩展了传统的整数阶PID控制器的概念。FOPID控制器允许积分和微分项的阶次不是严格的整数,而是可以是任意实数,这为系统提供了更多的设计自由度,并可能带来更好的性能。在双足机器人控制中,分数阶PID控制可以用于改善机器人的平衡控制、轨迹跟踪等任务的性能。下面我们将详细介绍如何使用Simulink进行基于分数阶PID控制方法的双足机器人仿真研究。

MHD0815的博客 880

网络编程学习

CS架构建立在局域网上,处理面向在相同区域的比较固定的用户群,满足对安全要求高的需求,交互性强,但信息流单一。BS架构建立在广域网上,处理面向分散的地域的不同的用户群,交互能力有限,但可处理如B-B、B-C、B-G等信息,并具有流向的变化。TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,通信之前要确保连接已经建立,通过Socket产生的IO流来进行网络通信。(Browser/Server)浏览器/服务器:只需要一个浏览器,用户通过不同的网址,访问不同的服务器。

qq_58158407的博客 1060

嘉立创封装图下载后必做的3步优化(附批量删除机械层技巧)

本文针对从嘉立创下载的封装图,系统讲解了三步核心优化流程,以解决其直接使用时的常见问题。重点介绍了如何高效批量删除冗余的机械层,避免制造错误;并详细说明了规范丝印层间距、统一焊盘命名等关键步骤,帮助工程师将第三方封装转化为可靠、合规的设计资源,从而提升PCB设计效率与文件质量。

weixin_29227585的博客 433

VS2022离线环境下的NuGet包管理:从本地源到依赖项全解析

本文详细解析了在VS2022离线环境下如何高效管理NuGet包,包括搭建本地NuGet源的两种方案(本地文件夹源和私有NuGet服务器)、获取离线包的三大渠道以及依赖项处理的实战技巧。通过自动化脚本和依赖树分析工具,帮助开发者解决离线环境中的依赖项黑洞问题,提升开发效率。

5f4d3s2a1q的博客 1060

网络编程学习笔记一(网络基础+TCP编程+UDP编程)

1.每一层实现不同的功能,对上层的数据做透明传输2.每一层向上层提供服务,同时使用下层提供的服务。

ssz__的博客 1329

从《视觉SLAM十四讲》到项目实战:一文读懂拓扑地图与语义地图为何是服务机器人的未来

本文探讨了服务机器人地图技术的演进,从传统几何地图到拓扑地图与语义地图的跨越。通过分析栅格地图的局限性和拓扑地图、语义地图的优势,揭示了它们在动态开放环境中的智能应用。文章还介绍了多模态语义融合架构和动态语义更新技术,为服务机器人的未来发展提供了技术路线图。

weixin_30292843的博客 478

网络编程学习总结

计算机网络是指将不同的具有独立功能的多台计算机及其,通过和通信设备连接起来,在及的管理和协调下,实现和的。无线电台...传播交流信息,数据交换,通信如何准确定位为网络上的一台主机 192.168.16.124:端口,定位到计算机上的某个资源找到了主机,如何传输数据呢?javaweb: 网页编程 B/S(Browser/Server架构)-------浏览器和服务器架构模式网络编程: TCP/IP C/S(Client/Server) -------客户机/服务器架构模式。

liu15225888231的博客 276

【STM32】IEC60730 Class B软件安全实现 Part2:自检库实战指南

本文是STM32 IEC60730 Class B软件安全实现的实战指南,详细介绍了如何将X-CUBE-CLASSB自检库集成到用户项目中。内容涵盖软件包解构、内存划分、启动与运行时自检的集成步骤、关键代码示例及调试技巧,并阐述了为最终通过安全认证所需的文档与流程准备,帮助开发者高效实现MCU功能安全。

weixin_29185167的博客 91

《QGIS快速入门与应用基础》108:CGCS2000对应的投影坐标系

本文详细解析了CGCS2000地理坐标系对应的各类投影坐标系,包括高斯-克吕格3°带/6°带、UTM、地方独立投影和Web墨卡托投影。文章系统阐述了各投影类型的分带规则、参数设置、精度特性及适用场景,并提供了EPSG编码对照表和QGIS操作指南。通过"基准+投影"的绑定机制,这些投影坐标系实现了平面坐标与经纬度的精准转换,满足从大比例尺工程测量到Web地图服务等不同应用需求。内容涵盖投影原理、坐标格式、变形控制等关键技术要点,为GIS开发者和测绘人员提供了实用的参考信息。

LuckyHanMo的博客 540

网络编程-------初学者入门

网络编程

qq_46513803的博客 2850

【Android面试八股文】Android Application为什么是单例?

这道题相对简单,就是考察大家是否了解application的创建流程。的实例,它用来存储和处理整个全局变量的一些事情,它同时还是一个。为空的时候,才会创建,从而保证了它是一个单例对象。一样有自己的生命周期,但是它并没有那么复杂,因为。对象的创建过程,找出它为什么是单例的原因。全局进行一些配置,比如配置插件。的时候才会创建,所以说可以在。凭什么是单例,我们查看下。启动的时候都会创建一个。是怎么一步步创建的。是一个单例,即每一个。

字节卷动 531

【转载】浅谈如何学习网络编程

转自:http://blog.youkuaiyun.com/xutaozero21/article/details/5526002 如何学习网络编程?这是我的经验之谈,我从来就没有系统的学习过网络编程(非科班么),学习过程中走了不少弯路。最近在读经典的《Linux程序设计(第3版)》,第十五章讲的是套接字Socket编程,读完之后,产生了一些想法,觉得有必要写下来。 学习网络编程我遇到的主要两个困

蝉之洞 593

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最新浅谈如何学习网络编程,阿里java高级面试题及答案

金三银四到了,送上一个小福利!本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取f254613a03fab5e56a57acb)收录**需要这份系统化的资料的朋友,可以点击这里获取。

2301_82243700的博客 950

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Qt学习笔记(三)网络编程

之前我们在Linux应用层的学习时提到了网络编程,本节是进行Qt下TCP / IP 客户端的编写。

sincerelover的博客 1432

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python学习第八天 | python在数据库的应用,浅谈多线程编程,浅谈socket网络编程

一,Python与数据库 1,安装准备 安装数据库数据库 yum install mariadb-server -y systemctl start mariadb.service 修改密码 mysql_secure_installation 安装编译器 yum install gcc -y 安装MySQL-python yum install MySQL-python -y pip insta...

Minz 594

ie浏览器获取下拉菜单返回结果_浅谈浏览器网络捕获器在 Python 网络编程中的辅助作用,值得学习...

Python的网络编程的最典型应用就是搜索引擎的网络爬虫了。 对于个人而言,更多的是利用python编程操作浏览器的HTTP请求 ,这其中有如下三种主要场景:1. 请求页面场景:这种场景通常是直接对URL页面的请求,通常不包含用户私有化的交易数据,通常使用浏览器请求的GET方式 。2. 数据提交场景:这种场景通常是浏览器展示的页面上的用户输入要素提交后台的过程,这种提交可以有两种方式 ,简单的方式...

weixin_39943678的博客 113

浅谈网络编程的入门

写下自己的经验希望能给想学习网络编程的又不知道从何入手的人一点参考。 前言: 这篇博文是我自己在学习linux下C++网络编程之后写下的,主要是说了自己对linux下C++网络编程的一些理解。 第一:学习C++网络编程需要看什么书:     1. 你需要一本C++的入门书籍,什么入门书籍好呢?很多,自己百度搜一下找些PDF看看看也行。在熟悉了C++的语法和一些简单的用法,

waponx的专栏 1264

浅谈网络编程

前言:在这个互联互通的时代,显然网络已经成为我的基本生存环境了,没有了网络,会很无聊,学不到东西,无法与时俱进等等,就像鱼儿离开了水一样,无法呼吸!所以本次分享一下我的项目经验。

《一刀流》 280

浅谈socket网络编程

前言: 这几天没什么事做,借此机会学习了MFC编程,牵扯到网络这一块东西,由于之前做的是手机游戏的开发,网络这一块接触的也不是很多,为了做出一个简单的支持广播的websocket server,查阅了一些有关网络编程的书籍和之前大学的PPT课件,在网上找了很多相关代码,左抄一句,右抄一句,弄了一个星期竟然还是漏洞百出,调试不起来,只好从头来过了,先补一些基本知识,然后再一步步根据原理实现,今天终

kingsir2020的博客 1147

浅谈C++学习方向

转自http://blog.sina.com.cn/s/blog_9cc7d5ce0100yy4b.html C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代...

264
上一篇: OTL学习笔记--OTLHelper的实现
下一篇: 减少rm命令带来的危险--写在误删Portage数据库之后
xutaozero21
博客等级 码龄19年 113粉丝 40原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值