网络编程
理论知识很重要,只有记忆和理解了理论,才能更好的组织代码逻辑的编写。
一:基础知识
1.生活中到处都是Client Server架构(C/S架构),浏览器就是Client端。
2.一台电脑装上操作系统之后,就可以玩单机游戏了,只要不联网,只能自己玩,想一起玩必须联网,进入互联网互相交流,交换信息。
3.互联网的核心就是一堆协议组成,协议是大家约定好的标准,大家都遵守。
4.OSI七层协议,这里记住五层就可以了
应用层 网络层 传输层 数据链路层 物理层
用户只能感知到应用层,搞清楚每层的协议,就基本理解了互联网通信的原理
每个上层依赖它的下一层,越往上越靠近用户,越往下越靠近硬件。
物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。
数据链路层:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思,
数据链路层的功能:定义了电信号的分组方式。
传输层:建立端口间的通信
网络层:ip协议找到网络中的计算机
应用层:用户使用的都是应用层,大家都可以开发应用程序,类别也是千差万别,数据也是千差万别。
更加详细的参考:https://www.cnblogs.com/linhaifeng/articles/5937962.html
二:Socket套接字
开发者从应用层组织数据,面向Socket就可以了开发了,无需了解下面层的具体协议如何组装,让socket去组装,你只需要准备原始数据即可。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
分类
刚开始套接字用来一台计算机不同进程间通信
基于文件类型的套接字家族 AF_UNIX
基于网络类型的套接字家族 AF_INET
我们只关心网络通信,因此只用AF_INET
三:目标
写一个基于socket同行的C/S架构的软件。