【网络原理】网络编程基础和Socket套接字

目录

  • 🌴网络编程基础
    • 🌸为什么需要网络编程?
    • 🌸什么是网络编程
    • 🌸网络编程中的基本概念
      • 🌻发送端和接收端
      • 🌻请求和响应
      • 🌻客户端和服务端
      • 🌻常见的客⼾端服务端模型
  • 🌳Socket套接字
    • 🌸概念
    • 🌸分类
    • 🌸Java数据报套接字通信模型
    • 🌸Java流套接字通信模型
    • 🌸Socket编程注意事项、
  • ⭕总结

🌴网络编程基础

🌸为什么需要网络编程?

⽤⼾在浏览器中,打开在线视频⽹站,如优酷看视频,实质是通过⽹络,获取到⽹络上的⼀个视频资
源。
与本地打开视频⽂件类似,只是视频⽂件这个资源的来源是⽹络。
相⽐本地资源来说,⽹络提供了更为丰富的⽹络资源:

所谓的⽹络资源,其实就是在⽹络中可以获取的各种数据资源。
⽽所有的⽹络资源,都是通过⽹络编程来进⾏数据传输的。

🌸什么是网络编程

⽹络编程,指⽹络上的主机,通过不同的进程,以编程的⽅式实现⽹络通信(或称为⽹络数据传
输)

在这里插入图片描述
当然,我们只要满⾜进程不同就⾏;所以即便是同⼀个主机,只要是不同进程,基于⽹络来传输数
据,也属于⽹络编程。
特殊的,对于开发来说,在条件有限的情况下,⼀般也都是在⼀个主机中运⾏多个进程来完成⽹络编
程。
但是,我们⼀定要明确,我们的⽬的是提供⽹络上不同主机,基于⽹络来传输数据资源:
• 进程A:编程来获取⽹络资源
• 进程B:编程来提供⽹络资源

🌸网络编程中的基本概念

🌻发送端和接收端

在⼀次⽹络数据传输时:
发送端:数据的发送⽅进程,称为发送端。发送端主机即⽹络通信中的源主机。
接收端:数据的接收⽅进程,称为接收端。接收端主机即⽹络通信中的⽬的主机。
收发端:发送端和接收端两端,也简称为收发端。

注意:发送端和接收端只是相对的,只是⼀次⽹络数据传输产⽣数据流向后的概念。
在这里插入图片描述

🌻请求和响应

⼀般来说,获取⼀个⽹络资源,涉及到两次⽹络数据传输:
• 第⼀次:请求数据的发送
• 第⼆次:响应数据的发送。

好⽐在快餐店点⼀份炒饭:
先要发起请求:点⼀份炒饭,再有快餐店提供的对应响应:提供⼀份炒饭
在这里插入图片描述

🌻客户端和服务端

服务端:在常⻅的⽹络数据传输场景下,把提供服务的⼀⽅进程,称为服务端,可以提供对外服务。
客⼾端获取服务的⼀⽅进程,称为客⼾端。

对于服务来说,⼀般是提供:
• 客⼾端获取服务资源
在这里插入图片描述
• 客⼾端保存资源在服务端
在这里插入图片描述
好⽐在银⾏办事:
• 银⾏提供存款服务:⽤⼾(客⼾端)保存资源(现⾦)在银⾏(服务端)
• 银⾏提供取款服务:⽤⼾(客⼾端)获取服务端资源(银⾏替⽤⼾保管的现⾦)

🌻常见的客⼾端服务端模型

最常⻅的场景,客⼾端是指给⽤⼾使⽤的程序,服务端是提供⽤⼾服务的程序:

  1. 客⼾端先发送请求到服务端
  2. 服务端根据请求数据,执⾏相应的业务处理
  3. 服务端返回响应:发送业务处理结果
  4. 客⼾端根据响应数据,展⽰处理结果(展⽰获取的资源,或提⽰保存资源的处理结果)

🌳Socket套接字

🌸概念

Socket套接字,是由系统提供⽤于⽹络通信的技术,是基于TCP/IP协议的⽹络通信的基本操作单元。
基于Socket套接字的⽹络程序开发就是⽹络编程。

🌸分类

Socket套接字主要针对传输层协议划分为如下三类:
流套接字:使⽤传输层TCP协议
TCP,即Transmission Control Protocol(传输控制协议),传输层协议。
以下为TCP的特点(细节后续再学习):
• 有连接
• 可靠传输
• ⾯向字节流
• 有接收缓冲区,也有发送缓冲区
• ⼤⼩不限
对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的
情况下,是⽆边界的数据,可以多次发送,也可以分开多次接收。

数据报套接字:使⽤传输层UDP协议
UDP,即User Datagram Protocol(⽤⼾数据报协议),传输层协议。
以下为UDP的特点(细节后续再学习):
• ⽆连接
• 不可靠传输
• ⾯向数据报
• 有接收缓冲区,⽆发送缓冲区
• ⼤⼩受限:⼀次最多传输64k
对于数据报来说,可以简单的理解为,传输数据是⼀块⼀块的,发送⼀块数据假如100个字节,必须⼀次发送,接收也必须⼀次接收100个字节,⽽不能分100次,每次接收1个字节。

原始套接字
原始套接字⽤于⾃定义传输层协议,⽤于读写内核没有处理的IP协议数据。
我们不学习原始套接字,简单了解即可。

🌸Java数据报套接字通信模型

对于UDP协议来说,具有⽆连接,⾯向数据报的特征,即每次都是没有建⽴连接,并且⼀次发送全部
数据报,⼀次接收全部的数据报。
java中使⽤UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使⽤
DatagramPacket 作为发送或接收的UDP数据报。对于⼀次发送及接收UDP数据报的流程如下:

在这里插入图片描述
以上只是⼀次发送端的UDP数据报发送,及接收端的数据报接收,并没有返回的数据。也就是只有请
求,没有响应。对于⼀个服务端来说,重要的是提供多个客⼾端的请求处理及响应,流程如下:
在这里插入图片描述

🌸Java流套接字通信模型

在这里插入图片描述

🌸Socket编程注意事项、

在这里插入图片描述

  1. 客⼾端和服务端:开发时,经常是基于⼀个主机开启两个进程作为客⼾端和服务端,但真实的场
    景,⼀般都是不同主机。
  2. 注意⽬的IP和⽬的端⼝号,标识了⼀次数据传输时要发送数据的终点主机和进程
  3. Socket编程我们是使⽤流套接字和数据报套接字,基于传输层的TCP或UDP协议,但应⽤层协议,
    也需要考虑,这块我们在后续来说明如何设计应⽤层协议。
  4. 关于端⼝被占⽤的问题
  5. 如果⼀个进程A已经绑定了⼀个端⼝,再启动⼀个进程B绑定该端⼝,就会报错,这种情况也叫端⼝被占⽤。对于java进程来说,端⼝被占⽤的常⻅报错信息如下:
    在这里插入图片描述
    此时需要检查进程B绑定的是哪个端⼝,再查看该端⼝被哪个进程占⽤。以下为通过端⼝号查进程的⽅
    式:
    ◦ 在cmd输⼊ netstat -ano | findstr 端⼝号 ,则可以显⽰对应进程的pid。如以下命
    令显⽰了8888进程的pid
    ◦ 在任务管理器中,通过pid查找进程
    在这里插入图片描述
    解决端⼝被占⽤的问题:
    ◦ 如果占⽤端⼝的进程A不需要运⾏,就可以关闭A后,再启动需要绑定该端⼝的进程B
    ◦ 如果需要运⾏A进程,则可以修改进程B的绑定端⼝,换为其他没有使⽤的端⼝。

⭕总结

关于《【网络原理】网络编程基础和Socket套接字》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度智能云发布专用向量数据库 VDB 1.0,全新设计内核开启性能狂飙

1 专用向量数据库应对未来业务挑战 向量数据库 向量检索 数据库 向量数据库大致可以分为 2 部分:向量数据的检索,以及向量数据的存储和管理。 向量数据库的性能,比如高 QPS、低延时等,使得业务能够更快的响应用户的查询请求…

前端手册-实现挂坠灯笼效果

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

ChatGPT发不出消息?GPT发不出消息怎么办?

前言 今天发现,很多人的ChatGPT无法发送信息,我就登陆看一下自己的GPT的情况,结果还真的无法发送消息,ChatGPT 无法发送消息,但是能查看历史的对话,不过通过下面的方法解决了。 第一时间先打开官方的网站&a…

Facebook广告必坑指南

不明确的目标: 在开始广告活动之前,确保你清楚自己的广告目标。是想提高品牌知名度、促进销售、还是增加网站流量?明确的目标有助于指导广告内容和策略。 忽视目标受众定位: 确定你的目标受众是关键的。使用Facebook广告管理工具…

[2024-03-09 19:55:01] [42000][1067] Invalid default value for ‘create_time‘【报错】

这个错误可能是因为你的 MySQL 数据库版本不支持 CURRENT_TIMESTAMP 作为默认值。在一些早期版本中,MySQL 对 TIMESTAMP 类型字段的默认值设置有限制,只允许使用特定的常量值(如 0000-00-00 00:00:00 或 CURRENT_TIMESTAMP())。如…

Mybaties-Plus saveBatch()、自定义批量插入、多线程批量插入性能测试和对比

一.背景 最近在做一个项目的时候,由于涉及到需要将一个系统的基础数据全量同步到另外一个系统中去,结果一看,基础数据有十几万条,作为小白的我,使用单元测试,写了一段代码,直接采用了MP(Mybati…

挑战杯 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

laravel-admin 头部添加操作

新建html 样式及js namespace App\Admin\Extensions\Nav;class Links {public function __toString(){return <<<HTML<li><a href"" οnclick"js_method();return false;"><i class"fa fa-floppy-o"></i><s…

解读BOT攻击,探索灵活高效的防护之道

回顾早期的互联网应用&#xff0c;由于业务流量比较小&#xff0c;往往单台服务器就能满足负载需求。随着互联网的流量越来越大&#xff0c;单服务器已经不能满足业务需求&#xff0c;无论它优化得再好&#xff0c;都较难承受大量的访问压力。支持负载均衡的技术很多&#xff0…

RocketMQ-存储与弹性伸缩

存储与弹性伸缩 一、介绍二、存储架构图1.CommitLog2.ConsumeQueue3.IndexFile 三、消息读写流程1.写入流程1.1 获取Topic元数据1.2 消息投递1.3 消息写入 2.读取流程2.1 获取Topic元数据2.2 消息拉取2.3 消息消费 四、消息持久化1.页缓存2.刷盘2.1 同步刷盘2.2 异步刷盘 五、集…

大路灯哪个牌子好?不同价位“卷王”级别大路灯推荐

身为一名专业的测评员&#xff0c;多年来见过很多因错用不专业大路灯而伤眼的案例&#xff0c;像眼睛疲劳、视力下降等很是普遍。大路灯本是备受用户喜爱的照明工具&#xff0c;之所以存在伤眼的负面争议&#xff0c;各类不专业产品就是罪魁祸首!它们的问题可不仅仅是选用材料差…

git命令行提交——github

1. 克隆仓库至本地 git clone 右键paste&#xff08;github仓库地址&#xff09; cd 仓库路径&#xff08;进入到仓库内部准备提交文件等操作&#xff09; 2. 查看main分支 git branch&#xff08;列出本地仓库中的所有分支&#xff09; 3. 创建新分支&#xff08;可省…