【Java网络编程】Socket套接字

news2024/9/22 21:35:43

哈喽,大家好~我是你们的老朋友: 保护小周ღ,本期为大家带来的是网络编程的前提概念 Socket 套接字,操作系统提供Socket 用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的角度讲基于Socket 套接字开发,就是网络编程。概念篇~~
更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

一、网络编程的基本概念

网络编程是指编写能够在网络上传输数据的程序(进程)。这包括利用网络协议,如 TCP/IP 和 HTTP,开发应用程序,使其能够在不同的计算机之间进行通信和数据交换。

我们的每一个应用层程序都可以看作是一个进程,每个进程默认会创建一个线程运行,可以理解为 C/C++ 或 Java 中的main() 函数,main() 函数就可以认为是主线程,主执行流。

互联网的最大的意义在于资源共享,网络编程的意义在于它可以让不同计算机之间的数据交换和通信成为可能,将分布在不同地点的计算机和设备连接在一起,使它们能够进行数据传输、共享资源、等操作。只要是基于网络来传输数据的程序,都属于网络编程的范畴。

在日常生活中,我们联网实际上就是连接上了各大运营商的服务器(移动,联通等),我们的设备通过百度浏览器向百度服务器发出请求,例如搜索:美女的图片,百度服务器(应用端)就会分析这条请求,看看自己有没有美女图片,如果有,那百度服务器就会将美女图片响应给发出请求的设备。这些操作涉及到一些知识点——百度浏览器这个应用程序需要有能够在网络中发送信息的能力,发给谁:百度服务器,与其他设备具有连接的能力,接收能力:百度浏览器与百度服务器建立连接之后,需要能够真实有效的接收百度服务器发来的信息并解析,所以百度服务器也需要具有相同的功能。

进程A:通过编程来获取所欲网络资源

进程B:  通过编程来提供它人所需网络资源


1.1 发送端和接收端

在一次网络数据传输时:

发送端:是指在通讯中负责发送数据的设备或程序。发送端将要传输的数据转换为特定的信号或数据包,并通过网络或传输介质将其发送到接收端。在计算机网络通讯中,发送端可以是任何能够发送消息的设备,如电脑、手机、服务器等。

接收端:通常是指在数据传输中接收数据的设备或系统。在通信领域,接收端可以是计算机、手机、电视机、路由器等设备,用于接收来自发送端的信息并将其解码以便进行显示、存储或进一步处理。

收发端:是指具备发送和接收数据能力的设备或组件。在通信领域中,常常使用收发端作为通信链路两端的统称。收发端是通信系统中至关重要的组成部分,它们负责将信息从一个节点传递到另一个节点,是实现通信的基础。

发送端和接收端只是一次网络数据传输产生的数据流向的概念。


1.2 请求和响应

举个生活中的例子,张三给李四打个电话,打电话首先是找到李四的电话号码,然后点击拨通,李四这边手机提示张三老铁来电,点击接通并开口道:摩西摩西 ?,李四这个操作就可以视为在响应张三的请求,此时发送端就变为李四老铁,接收端就是张三老铁。

也好比去餐馆中恰饭,你给老板来一句,老板我想吃蛋炒饭——请求,老板回应一声,表示收到你的请求,然后迅速将饭抄好,再将饭给你之前,先打个招呼,客官你的饭好了:提供一份蛋炒饭——响应。


1.3 客户端和服务器

上文也提到,在我们日常生活中上网的过程就是访问其他各大运营商的服务器,首先在一个大的环境下入网(移动,联通),其次链接各个运营商的服务器,访问对应服务器中的资源。

客户端:尝试获取服务的一方的进程,称之为客户端。例如:使用百度浏览器访问百度的服务器,搜索美女图片,服务器表示可以没问题,我这边有很多,全给你,然后百度浏览器这个应用程序就会获取到许多的美女图片。

服务器:在网络数据传输的场景下,把提供服务的一方的进程,称为服务端。

对于服务端来说,一方面提供客户端想要获取的服务资源,另一方面提供客户端保存资源在服务端的功能。


二、Socket 套接字

Socket(套接字)是网络编程中的一个概念,它是通过网络进行通信的一种方式,由操作系统提供的用于网络通信的技术,Socket 用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的角度讲基于Socket 套接字开发,就是网络编程。

真实的网络采用 TCP / IP 网络模型,下层协议给上层协议提供服务,上层协议可以直接调用下层协议,但是不允许跨层次调用,为应用层提供服务的是传输层,所以,Socket 也可以看作是传输层提供给应用层的接口。

API全称(AplicationProgrammingInterface),一般来说就是软件之间信息交互的桥梁,例如,qq提供账号验证的接口(API),微信提供微信支付的接口——给其他的应用程序使用,所以有些应用程序会提供使用 qq 登录,微信登录,微信支付什么的功能,当然别人使用这方面的功能是要给腾讯交钱的。

2.1 Socket 套接字功能分类

首先在真实的网络环境中,通信双方通信需要遵守标准的网络协议,网络协议约定了通信规范,协议之间按照功能分层,常见的就是 TCP / IP 五层网络模型:

每层协议主要的功能博主就不详细介绍了,感兴趣的朋友可以查看博主的另一篇博客:程序猿眼中的协议:TCP / IP 五层网络模型_保护小周ღ的博客-CSDN博客

协议分层管理,约定下层协议给上层协议提供服务,上层协议调用下层协议,不可以跨层级调用。

网络编程是站在应用层的角度开发的,所以传输层协议需要为应用层提供服务,应用层也只能直接跟传输层交互。

Socket(套接字)主要争对传输层协议划分为如下三类:

  • 面向字节流套接字:基于传输层 TCP 协议

面向字节流套接字是一种网络传输方式,基于传输层TCP协议实现。它将数据视为无结构的字节流,并在数据传输过程中保证数据的可靠性。

TCP 协议的特点

  1. 面向有连接 :传输数据之前,通信双方先建立可靠连接
  2. 可靠传输 : TCP 协议有超时重传的机制和确认应答机制,当发现连接没有问题,但数据没有成功传输的时候会重新发送数据。
  3. 面向字节流:字面意思,使用字节流传输
  4. 接收缓冲区,发送缓冲区:在进行网络数据通信时,用于存储待发送或已接收数据的缓冲区,有了缓冲区的概念,可以帮助协调发送方和接收方之间的数据传输速度,并最大限度地减少数据丢失或混乱的风险……
  5. 传输数据的大小不受限制:字节流,流式传输,前提是有连接。
  6. 全双工通信:通信双方都可以同时进行信息交互
  • 面向数据报套接字:基于传输层 UDP 协议

面向数据报套接字是一种基于传输层 UDP协议的网络通信方式。它不提供可靠性保证和流量控制机制,但是具有较低的延迟和适合实时应用的特点。

UDP 协议的特点

  1. 面向无连接:传输数据之前,通信双方不依赖于建立连接,只需要知道谁发给谁即可。
  2. 不可靠传输:只负责发送,不关注数据是否传输成功,没成功啥也不干。
  3. 面向数据报:使用 UDP 数据报的形式传输,数据报可以理解为数据是一块一块的传输。
  4. 有缓存区的概念
  5. 数据传输大小受限制:UDP 数据报最大占 64k, 1k = 1024字节
  6. 全双工通信:通信双方都可以同时进行信息交互

 具体信息可以观看博主 UDP 协议的博文

  • 面向原始套接字:基于自定义传输层协议

 原始套接字:是一种对原始网络报文进行处理的套接字,主要用途有:

  • 发送自定义的IP数据包
  • 发送ICMP数据包
  •  网卡的侦听模式,监听网络上的数据包
  • 伪装IP地址
  • 自定位协议的实现

到这里,网络编程中的Socket套接字的概念博主已经分享完了,希望对大家有所帮助,如有不妥之处欢迎批评指正。 

本期收录于博主的专栏——JavaEE,适用于编程初学者,感兴趣的朋友们可以订阅,查看其它“JavaEE基础知识”。

下期预告:Java使用Socket套接字基于UDP 协议实现客户端服务器通信。

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

遇见你,所有的星星都落在我的头上……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在poetry虚拟环境下打包exe

本博客介绍了在poetry虚拟环境下打包exe的流程,包含两个部分 打包的基本流程打包过程中遇到的问题 打包的基本流程 copy打包工具到本地,(share:\公用共享\芯片部\乔羽\img_generate\系统部提供的打包exe工具) 用poetry搭建虚拟环境 在打包…

微积分入门

文章目录 前言初期积分微分微积分问题 后期极限 ε \varepsilon ε- δ \delta δ极限勒贝格积分 结语 前言 微积分总共走过了两个时期。首先是牛顿和莱布尼茨利用无穷小量定义微分和积分,并且发现了微分和积分的关系,这是第一个时期,这时的…

如何在元宇宙中促进品牌增长:消费者喜好的热点调查

欢迎来到Hubbleverse 🌍 关注我们 关注宇宙新鲜事 📌 预计阅读时长:5分钟 本文仅代表作者个人观点,不代表平台意见,不构成投资建议。 音乐和旅游是用户被元宇宙虚拟体验所吸引的前两个领域。根据Reach 3 Insights的…

ArrayList 的特点及优缺点

前面讲过,数组有很多缺点且使用不太方便,但是我们存储数据的时候很多情况又不得不使用它,那么有没有对数组封装一下的类,让我们更方便呢?答案是有的,他就是 ArrayList,他是一个基于数组的集合&a…

Ceph入门到精通- storcli安装

storcli 是LSI公司官方提供的Raid卡管理工具,storcli已经基本代替了megacli,是一款比较简单易用的小工具。将命令写成一个个的小脚本,会将使用变得更方便。 安装简单,Windows系统下解压出来以后可以直接运行。 Linux系统默认位置…

CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂

1. CGI # 1、通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。 # 2、CGI程序可以…

今儿咱就看看redis的淘汰策略你知道多少

一、前言 Redis在我们日常开发中是经常用到的,Redis也是功能非常强大,可以进行缓存,还会有一些排行榜、点赞、消息队列、购物车等等;当然还有分布式锁Redisson,我们使用肯定少不了集群!小编最近学习到一些…

AI-ISP:手机相机是如何将风景变成图片的?

文章目录 前言1. ISP芯片2. Sensor知识3. RAW数据4. ISP Pipeline5. AI-ISP结束语 前言 本篇文章只干一件事:AI-ISP:手机相机是如何将风景变成图片的? 1. ISP芯片 一颗小小的SoC芯片(10mm x 10mm)上集成了一百多亿个晶体管(Kirin 9000有153亿…

【pandas】Python读取DataFrame的某行或某列

行索引、列索引、loc和iloc import pandas as pd import numpy as np # 准备数据 df pd.DataFrame(np.arange(12).reshape(3,4),indexlist("abc"),columnslist("WXYZ"))行索引(index):对应最左边那一竖列 列索引(columns):对应最…

建筑数据破解JS逆向爬虫

建筑数据破解JS逆向爬虫 地址:https://jzsc.mohurd.gov.cn/data/project GitHub地址:https://github.com/NearHuiwen/JzscCrawler RequestsPyExecJS JS文件:req_aes.js 目标 抓包,抓取建筑市场数据(注:用于学习&am…

multi-scale training多尺度训练

文章目录 背景参考1:[输入不同长度的向量,输出相同长度](https://www.zhihu.com/question/569406523/answer/2780168200):参考2:[多种尺寸的图像数据训练没有全连接层的卷积神经网络模型](https://www.zhihu.com/question/533481647)参考3&am…

展开说说:Adobe XD 哪个版本好用?

工具还是得顺着自己的习惯才是最好 即时设计 - 可实时协作的专业 UI 设计工具即时设计是一款支持在线协作的专业级 UI 设计工具,支持 Sketch、Figma、XD 格式导入,海量优质设计资源即拿即用。支持创建交互原型、获取设计标注,为产设研团队提…

如何快速将PDF文件转换为Word文档

PDF文件是一个广泛使用的电子文档格式,其被广泛应用于各种领域,包括教育、商业和政府。虽然PDF文件非常实用,但有时你需要将其转换为Word文档,以便更方便地编辑和处理。以下是几种快速将PDF文件转换为Word文档的方法。 1. 使用在…

Linux Shell 实现一键部署http+用户名密码登录

Apache 前言 Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等…

【python】采集天气数据并作可视化,怀念一下之前得好天气

前言 这几天,长沙得天气突然爆冷,每天上班跟渡劫一样 生怕一不小心,风就把伞吹跑了,人湿点无所谓,但是我得伞不能有事 现在得我无比怀念之前得好天气,今天我就来采集一下天气数据并作个可视化怀念一下它…

C# 特性(Attribute)

一、特性(Attribute)定义 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 特性使用中括号…

ArduPilot之开源代码框架

ArduPilot之开源代码框架 1. 系统框架2. 工程框架2.1 工程目录2.2 代码组成2.3 运行流程 4. 硬件传感器总线4.1 I2C4.2 SPI4.3 UART4.4 CAN 5. 软件设计概念6. 总结7. 参考资料 在研读ArduPilot的过程,尝试用一些中文的词汇来描述,可能会造成某些理解上的…

sparksql select后插入自己 报错 Cannot overwrite a path that is also being read from

问题现象 spark.version < 3.0.1 执行下面语句报错: Cannot overwrite a path that is also being read from ... 哪些情况算同时读写自己? 如果读自己和写自己在一个spark stage中,就算同时读写自己. spark.table("tb1")// 其他stransform.write.mode("…

运维监控工具PIGOSS BSM扩展指标介绍

PIGOSS BSM运维监控工具&#xff0c;除系统自带指标外&#xff0c;还支持添加SNMP扩展指标、脚本扩展指标、JMX扩展指标、自定义JDBC指标等&#xff0c;今天本文将介绍如何添加SNMP扩展指标和脚本扩展指标。 添加SNMP扩展指标 前提&#xff1a;需要知道指标的oid 例子&#xff…

刚毕业在深圳做程序员,我来聊聊月薪1万在大城市生活能剩下多少

我今年刚毕业&#xff0c;然后在大城市做IT&#xff0c;可能工资大概1万左右。现在讨论一下&#xff0c;月薪1万在大城市最后能留下多少。以下是兴哥的一位刚毕业没多久的程序员朋友&#xff0c;给大家分享一下程序员的薪资水平&#xff0c;在大城市生活 &#xff0c;一个月会剩…