作者:困了电视剧
专栏:《JavaEE初阶》
文章分布:这是一篇关于网络初识的文章,在这篇文章中剖析了网络编程的一些概念以及用Java实现网络编程的一些流程,希望对你有所帮助!
目录
网络编程
含义和一些概念
网络编程,指网络上的主机,通过 不同的进程 ,以编程的方式实现 网络通信(或称为网络数据传输) 。当然,我们只要满足 进程 不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。
进程A:编程来获取网络资源。进程B:编程来提供网络资源。
发送端和接收端
在一次网络传输中:
发送端 :数据的 发送方进程 ,称为发送端。发送端主机即网络通信中的源主机。接收端 :数据的 接收方进程 ,称为接收端。接收端主机即网络通信中的目的主机。收发端 :发送端和接收端两端,也简称为收发端。注意:发送端和接收端只是相对的,只是一次网络数据传输产生数据流向后的概念。
在上述图文中,如果主机2将视频资源发送给主机1,那主机1就是接收端,主机2就是发送端。
如果主机1向主机2发送一个需要资源的请求,那此时主机1就是发送端,主机2就是接收端。
请求与响应
就像上述过程一样,获取一个网络资源一般需要涉及到两次网络传输:第一次是请求数据的发送,第二次是响应数据的发送。
客户端和服务端
服务端 :在常见的网络数据传输场景下,把 提供服务 的一方进程,称为服务端,可以提供对外服务。客户端 : 获取服务 的一方进程,称为客户端。
这个服务可以是获取服务资源,比如请求获取一个视频资源等,也可以是请求保存资源等。这些都可以算是服务,上述图文中,主机1是客户端,主机2是服务端。
常见的客户端服务端模型
最常见的场景,客户端是指给用户使用的程序,服务端是提供用户服务的程序:1. 客户端先发送请求到服务端2. 服务端根据请求数据,执行相应的业务处理3. 服务端返回响应:发送业务处理结果4. 客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)
主打的就是一个有应有答。
Socket套接字
Socket 套接字,是操作系统给应用程序提供的一组用于网络编程的API,操作系统原生的socket API 是C语言的,在这里,java将其进行了封装。
Socket套接字主要针对传输层协议划分成流套接字和数据报套接字,其中流套接字使用传输层TCP协议,而数据报套接字使用传输层UDP协议。
TCP和UDP的特点
以下为 TCP 的特点(细节后续再学习):1.有连接2.可靠传输3.面向字节流4.有接收缓冲区,也有发送缓冲区5.大小不限
以下为 UDP 的特点(细节后续再学习):1.无连接2.不可靠传输3.面向数据报4.有接收缓冲区,无发送缓冲区5.大小受限:一次最多传输 64k
Java数据报套接字通信模型
对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报。
1.接收端会首先创建一个DatagramSocket和一个空的DatagramPacket,这个空的DatagraPacket用来接受发送端发送过来的数据。2.发送端会创建DatagramSocket,然后构造发送的内容比如需要发送的数据,和发送需要的ip地址,端口号等信息,将这些打包成一个DatagramPacket进行发送。3.接收端接收到发送端发送来的UDP数据报后会将之前空的数据报进行更新,然后根据接收的数据,执行业务。4.接着接收端会构造发送的内容,这个发送的内容就是响应。5.发送端会构造一个空的数据报来接收这个响应,然后根据响应的数据决定下一步应该怎么做。
Java流套接字通信模型
流套接字通信模型是有连接的,我们将通信的双方分为Server服务端和Client客户端,所以他们之间的通信过程如下:
1.首先服务端会创建ServerSocket,这个ServerSocket会调用accept()方法等待接受请求。
2.客户端会创建链接Socket向服务端发送请求,服务端接受过后会创建链接Socket,这两个完全建立了连接。
3.此时服务端和客户端就可以实现相互通信,即服务端的InputStream流与客户端的OutputStream之间,客户端的InputStream和服务端的OutputStream之间。
4.最后结束通信时,服务端的Socket和客户端的Socket都需要调用close()方法进行关闭。
以上就是本篇博客的全部内容,在下一篇博客中我会实现一个简易的客户端和服务端,如有疏漏欢迎指正!