当前位置: 首页 > news >正文

<JavaEE> 网络编程 -- 网络编程和 Socket 套接字

目录

一、网络编程的概念

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

http://www.lryc.cn/news/265151.html

相关文章:

  • 【计算机系统结构实验】实验2 流水线中的冲突实验
  • conda环境下执行conda命令提示无法识别解决方案
  • 链接未来:深入理解链表数据结构(二.c语言实现带头双向循环链表)
  • 论文笔记 | Nature 2023 FunSearch:利用大语言模型在数学科学领域探索新的发现
  • JavaScript 对象和 JSON 字符串的区别
  • 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
  • MFC静态链接+libtiff静态链接提示LNK2005和LNK4098
  • 桶装水送水小程序:提升服务质量的利器
  • 深度学习在训练什么,什么是模型
  • Andorid 使用bp或者mk编译C文件生成so
  • 只更新软件,座椅为何能获得加热功能?——一文读懂OTA
  • EfficientDet:Scalable and Efficient Object Detection中文版 (BiFPN)
  • 视频监控技术经历了哪些发展阶段?视频监控技术未来趋势展望
  • 德人合科技 | 设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统
  • 类和对象(下篇)
  • 华为鸿蒙(HarmonyOS):连接一切,智慧无限
  • 劈窗算法反演地表温度
  • 持续集成交付CICD:基于ArgoCD 的GitOps 自动化完成前端项目应用发布与回滚
  • SSH无密登陆配置
  • 【bug日记】如何切换jdk版本,如何解决java和javac版本不一致
  • 【C语言】6-5 判断回文字符串 分数 20
  • STL中优先队列(堆)的详解
  • @vue/cli脚手架
  • 在 MyBatis 中<应该怎么写
  • 采访亚马逊云科技代闻:深度解读2023re:Invent与生成式AI
  • 黑豹程序员-安装docker-ce
  • 多臂老虎机算法步骤
  • pgsql的jsonb相关处理及样例
  • LeetCode-17 电话号码的字母组合
  • Ubuntu 22.04 系统创建用户并授权sudo权限