目录
一、网络编程的概念
1)什么是网络编程?
2)网络编程中的基本概念
1> 收发端
2> 请求和响应
3> 客户端和服务端
二、Socket套接字
1)什么是“套接字”?
2)Socket套接字的概念
3)Socket分类
1> 针对传输层协议,Socket套接字划分出了哪几个类?
2> 流套接字和数据报套接字特点的对比
一、网络编程的概念
1)什么是网络编程?
网络编程是指在网络环境下的主机,通过不同的进程,以编程的方式实现网络通信或网络数据传输。 |
基于网络环境下,即使是同一个主机,只要是不同进程间的数据传输,也属于网络编程。 |
2)网络编程中的基本概念
1> 收发端
发送端: | 是指数据的发送方进程,即网络通信中的源主机。 |
接收端: | 是指数据的接收放进程,即网络通信中的目的主机。 |
接收端和发送端并称为收发端。 |
2> 请求和响应
请求(request): | 发送请求,以期望获得某些数据。 |
响应(response): | 对接收到的请求做出反馈。 |
3> 客户端和服务端
客户端(client): | 在网络数据传输环境下,获取服务的一方进程称为客户端。 |
服务端(server): | 在网络数据传输环境下,提供服务的一方进程称为服务端。 |
服务端提供的服务包括但不限于为客户端反馈数据、为客户端保存数据。 |
常见客户端服务端模型:
二、Socket套接字
1)什么是“套接字”?
初见“套接字”这样的翻译,我是觉得相当离谱的,特别是一开始我是这么读的,“套”/“接字”。这就导致我根本无法理解这个词的含义,学习了“套接字”的含义之后,才明白原来是“套接”/“字”。 |
那么“套接字”究竟是在表达什么?在理解这个词之前,我们先看看另外一个词,“套接管”。 |
“套接管”是指在两个载体的接口之间套上一根用于连接的管子,这样就可以做到在不考虑载体接口口径的情况下,使载体之间可以有物质交流的路径。比如两根口径不一样的水管,使用“套接管”就可以将两根水管相连,并使水可以流动。 |
Socket直译是插口/插座的意思,作用是让不同主机之间可以经由网络,通过“数据流”进行数据交互。 |
由此我们可以发现,Socket的作用与上述的“套接管”作用十分相似,但Socket是一个单词而不是一根管,所以“套接管”,就变成了“套接字”。(极度怀疑这个词的第一个翻译者,应该懂得一些管道相关的知识) |
因此,在了解为什么叫“套接字”之后,就觉得这个翻译还是比其它一些翻译好多了。没错说的就是你,“鲁棒性”。不仅是简单粗暴的音译,连使用的字也令人难以理解,离了个大谱。 |
2)Socket套接字的概念
Socket套接字,是由系统提供的由于网络通信的技术,是基于TCP/IP协议的网络通信基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 |
Socket API 就可以认为是应用层和传输层之间的交互手段,通过 Socket API 就可以完成不同主机,不同系统之间的网络通信。 |
3)Socket分类
1> 针对传输层协议,Socket套接字划分出了哪几个类?
主要划分出了“流套接字”和“数据报套接字”。 |
流套接字:使用传输层TCP协议。TCP指Transmission Control Protocol(传输控制协议)。 |
数据报套接字:使用传输层UDP协议。UDP指User Datagram Protocol(用户数据报协议)。 |
2> 流套接字和数据报套接字特点的对比
流套接字(TCP) | 数据报套接字(UDP) | 说明 |
有连接 | 无连接 | 在双方通信时是否保存了彼此的关键信息。 |
可靠传输 | 不可靠传输 | 传输后有无确认是否发送到位。 |
面向字节流 | 面向数据报 | 以字节流进行传输,还是以数据报为单位进行传输。 |
有接收缓冲区和发送缓冲区 | 有接收缓冲区,无发送缓冲区 | |
大小不限 | 大小受限,一次传输最多64KB | 数据流长度不限,而数据报是有长度限制的。 |
全双工 | 全双工 | 使用一个Socket对象,既能发送数据又能接收数据,称为全双工。 |
阅读指针 -> 《 UDP 回显服务器 》
<JavaEE> 基于 UDP 的 Socket 通信模型-CSDN博客介绍了UDP协议的Socket相关类,实现了一个基于UDP的回显服务器。https://blog.csdn.net/zzy734437202/article/details/135144212