如何学习网络编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何学习网络编程相关的知识,希望对你有一定的参考价值。

лл

1.利用WinInet函数库写了几个简单的网络应用程序:简易登录、查询新书RSS等;了解了HTTP协议的一些内容。
2.看孙鑫的VC视频教程, ,虽然照着视频能够写出实例代码来,但是仅仅是会用,其中很多原理都不理解,比如说WSA开头的异步函数,Winsock2对socket的一些增强或者改进等。
3.一边上《计算机网络》的课,一边读《C++网络编程》。通过计算机网络课我知道了所谓的协议分析是怎么一回事情,通过wireshark抓包分析,“协议”就如同这个词本身意思是一样的,是通信过程中的一种约定,规定了数据包中的每个或每几个字节代表了什么意思;
4.去看《计算机网络高级编程技术》,我初略的翻了翻,看到里面的基础、提高、综合训练篇、突然反应过来:socket和操作系统提供的系统调用,基本上都是C语言接口的,协议字段的具体表现,不就是用结构体吗?协议中的几个字节代表什么与C语言基本数据类型就能对应了起来(-_-!这是缺少实践造成的迟钝啊)。
5.了解下Boost.asio,Java的MINA框架,这些都是异步I/O前摄器模式的实现,当然还有ACE_Proactor
6.阅读《深入理解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这样的面向应用层的函数库。
参考技术A 去 online judge做题,没有基础的话去买本书学

参考资料:www.rqnoj.cn

参考技术B 建议报一个培训班,网络编程的前景很不错的,随着移动互联网的普及与发展,手机应用不断深入我们生活的方方面面,移动系统和软件应用的开发领域,成为了未来很具有潜力的行业之一。
在未来5年内,合格软件人才的需求将远大于供给。其中,尤以JAVA、phphtml5与CSS3开发、Asp.net开发人才最为缺乏。
参考技术C 我可以来教你,看我的资料里有我的QQ

如何学习系统编程

以学习概念为主(文件系统的结构,机制出现原理及原因) 一些比较重要的接口,需要记忆 使用方法,(进程操作,文件操作,IO操作) 对于其他的内容,需要知道,如果要完成某个功能,有这样一个东西能帮助你完成目标。 要学的东西很多,准备待学表。 人脑是用于理解问题的,记忆是辅助的,也是不可或缺的 光理解不够

以上是关于如何学习网络编程的主要内容,如果未能解决你的问题,请参考以下文章

第二课 如何学习Python编程?

初学者学习编程,如何训练自己的编程思维,资深程序员这样建议

零基础如何学习编程

了解卷积神经网络如何使用TDA学习

如何学习网络编程

20多岁学习编程晚吗?看看56岁的大叔如何克服自我怀疑学习编程