目录
1.网络编程概念
2.网络编程中的基本概念
2.1发送端 接收端 收发端
2.2请求和响应
2.3客户端服务端
2.4Socket套接字
2.4.1概念
2.4.2分类
2.4.3Socket通信的基本步骤
2.5Socker API
2.6封装/分用 vs 序列化/反序列化
1.网络编程概念
网络编程指网络上的主机上,通过不同的进程,以编程的形式实现网络通信(或称为网络数据传输)。
只需满足进程不同即可,即便同一个主机,只要是不同的进程,基于网络来传输数据,也属于网络编程。
2.网络编程中的基本概念
2.1发送端 接收端 收发端
再一次数据传输时:
发送端:数据的发送方进程,称为发送端,发送端主机即网络通信中的源主机。
接收端:数据的接收方进程,称为接收端,接收端主机即网络通信中的目的主机。
收发端:发送端和接收端两端,称为收发端。
发送端与接收端是相对的,只是一次网络数据传输产生的数据流向后的概念。
2.2请求和响应
为获取一个资源时,涉及到两次网络数据传输:
第一次:请求数据的发送
第二次:响应数据的发送
2.3客户端服务端
服务端:在常见的网络数据传输的场景下,把提供服务的一方进程称为服务端,可以对外提供服务。
客户端:获取服务的一方进程。
2.4Socket套接字
2.4.1概念
Socket是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元,基于Socket套接字的网络程序开发就是网络编程。
2.4.2分类
流套接字:使用传输层TCP协议。
数据报套接字:使用传输层UDP协议。
原始套接字:原始套接字用于自定义传输层协议,用于读写内核没有处理的IP协议数据。
Java数据报套接字通信模型
对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数 据报,一次接收全部的数据报。 java中使用UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使用 DatagramPacket 作为发送或接收的UDP数据报。对于一次发送及接收UDP数据报的流程如下:
Java流套接字通信模型
2.4.3Socket通信的基本步骤
根据socket通信基本流程图,总结通信的基本步骤:
服务器端:
第一步:创建一个用于监听连接的Socket对像;
第二步:用指定的端口号和服务器的ip建立一个EndPoint对象;
第三步:用socket对像的Bind()方法绑定EndPoint;
第四步:用socket对像的Listen()方法开始监听;
第五步:接收到客户端的连接,用socket对像的Accept()方法创建一个新的用于和客户端进行通信的socket对像;
第六步:通信结束后一定记得关闭socket;
客户端:
第一步:建立一个Socket对像;
第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;
第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;
第五步:用socket对像的Receive()方法接受服务器发来的信息 ;
第六步:通信结束后一定记得关闭socket;
2.5Socker API
Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端 Socket。 不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的。
2.6封装/分用 vs 序列化/反序列化
一般来说,在网络数据传输中,发送端应用程序,发送数据时的数据转换(如java一般就是将对象转换 为某种协议格式),即对发送数据时的数据包装动作来说:
如果是使用知名协议,这个动作也称为封装
如果是使用小众协议(包括自定义协议),这个动作也称为序列化,一般是将程序中的对象转换为 特定的数据格式。
接收端应用程序,接收数据时的数据转换,即对接收数据时的数据解析动作来说:
如果是使用知名协议,这个动作也称为分用
如果是使用小众协议(包括自定义协议),这个动作也称为反序列化,一般是基于接收数据特定的 格式,转换为程序中的对象