计算机网络——应用层(3)

计算机网络——应用层(3)

  • 小程一言
    • 专栏链接: [link](http://t.csdnimg.cn/ZUTXU)
  • 点对点(P2P)
    • P2P网络一般用途
    • 优点
    • 缺点
    • 总结
  • 套接字编程
    • 基本步骤
      • UDP套接字
      • TCP套接字
        • 基本步骤
      • 二者对比

小程一言

我的计算机网络专栏,是自己在计算机网络学习过程中的学习笔记与心得,在参考相关教材,网络搜素的前提下,结合自己过去一段时间笔记整理,而推出的该专栏,整体架构是根据计算机网络自顶向下方法而整理的,包括各大高校教学都是以此顺序进行的。
面向群体:在学计网的在校大学生,工作后想要提升的各位伙伴,

专栏链接: link

在这里插入图片描述

点对点(P2P)

点对点网络,是一种计算机网络架构,其中每个节点(或者称为对等体)都可以充当客户端和服务器。在P2P网络中,所有节点都可以直接通信,而不需要中心化的服务器来协调通信。

P2P网络一般用途

  1. 在文件共享方面,P2P网络允许用户共享他们的文件,并允许其他用户从多个源头下载文件,从而提高下载速度并减轻服务器负载。
  2. 在分布式计算方面,P2P网络可以将计算任务分发给多个节点,从而加快计算速度和提高系统的可靠性。
    在这里插入图片描述

优点

去中心化、弹性和可伸缩性。由于没有单点故障,P2P网络通常更加稳定和可靠。
很容易地扩展,因为每个新加入的节点都可以提供额外的资源和带宽。

缺点

  1. 由于缺乏中心化的管理,P2P网络可能更容易受到安全漏洞和恶意行为的影响。
  2. P2P网络也可能导致网络拥塞和带宽消耗问题,特别是在大规模文件共享和分布式计算时
    在这里插入图片描述

总结

P2P网络是一种灵活、高效的网络架构,适用于许多不同的应用场景。在适当的管理和安全措施下,P2P网络可以为用户提供更好的性能和体验。

套接字编程

指使用套接字(socket)接口来进行网络编程的过程。套接字是一种通信机制,它允许不同计算机之间的进程进行通信。在实际应用中,套接字编程通常用于创建客户端-服务器模型的网络应用程序。

基本步骤

  1. 创建套接字:在编程中,首先需要创建一个套接字,以便进行网络通信。在C语言中,可以使用socket()函数来创建套接字。
  2. 绑定套接字:接下来,需要将套接字绑定到一个特定的地址和端口上,以便其他进程可以通过该地址和端口与该套接字通信。
  3. 监听连接:如果是服务器端程序,需要调用listen()函数来监听来自客户端的连接请求。
  4. 接受连接:一旦有客户端请求连接,服务器端程序需要调用accept()函数来接受连接,并创建一个新的套接字来与客户端进行通信。
  5. 发送和接收数据:一旦建立了连接,客户端和服务器端可以使用send()和recv()函数来发送和接收数据。
  6. 关闭套接字:最后,在通信结束后,需要调用close()函数来关闭套接字。
    在这里插入图片描述## 分类

UDP套接字

UDP是一种无连接的、不可靠的传输协议,它通过数据包的形式进行通信。UDP套接字编程是指使用UDP协议进行网络编程的过程,它通常用于那些对数据传输的实时性要求较高,而对数据可靠性要求较低的应用场景,比如音频和视频流的传输等。

在这里插入图片描述#### 基本步骤

  1. 创建套接字:使用socket()函数创建一个UDP套接字。在Python中,可以使用socket模块的socket()函数来创建UDP套接字:
import socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  1. 绑定套接字:将套接字绑定到一个本地地址和端口上,以便接收来自其他主机的数据包。在Python中,可以使用bind()函数来绑定套接字:
udp_socket.bind(('127.0.0.1', 8888))
  1. 发送数据:使用sendto()函数向指定的目标地址发送数据包。在Python中,可以使用sendto()函数来发送数据包:
udp_socket.sendto(b"Hello, UDP!", ('127.0.0.1', 9999))
  1. 接收数据:使用recvfrom()函数从套接字接收数据包,并获取发送方的地址信息。在Python中,可以使用recvfrom()函数来接收数据包:
data, addr = udp_socket.recvfrom(1024)
print("Received from", addr, ":", data.decode())
  1. 关闭套接字:在通信结束后,使用close()函数关闭套接字:
udp_socket.close()

TCP套接字

TCP是一种面向连接的、可靠的传输协议,它通过建立连接、数据传输和断开连接的方式来实现可靠的数据传输。TCP套接字编程是指使用TCP协议进行网络编程的过程,它通常用于那些对数据传输的可靠性和完整性要求较高的应用场景,比如Web服务器、邮件服务器等。

基本步骤

在这里插入图片描述

  1. 创建套接字:使用socket()函数创建一个TCP套接字。在Python中,可以使用socket模块的socket()函数来创建TCP套接字:
import socket
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  1. 绑定套接字:将套接字绑定到一个本地地址和端口上,以便接收来自其他主机的连接。在Python中,可以使用bind()函数来绑定套接字:
tcp_socket.bind(('127.0.0.1', 8888))
  1. 监听连接:如果是服务器端程序,需要调用listen()函数来监听来自客户端的连接请求:
tcp_socket.listen(5)
  1. 接受连接:一旦有客户端请求连接,服务器端程序需要调用accept()函数来接受连接,并创建一个新的套接字来与客户端进行通信:
client_socket, addr = tcp_socket.accept()
  1. 发送和接收数据:一旦建立了连接,客户端和服务器端可以使用send()和recv()函数来发送和接收数据:
client_socket.send(b"Hello, TCP!")
data = client_socket.recv(1024)
print("Received:", data.decode())
  1. 关闭套接字:最后,在通信结束后,需要调用close()函数来关闭套接字:
client_socket.close()
tcp_socket.close()

在这里插入图片描述

二者对比

  1. UDP套接字编程与TCP套接字编程相比,更加简单和高效,因为UDP协议不需要维护连接状态,也不需要进行握手和挥手等复杂的过程。但是,由于UDP协议是不可靠的,数据包可能会丢失或乱序,因此在使用UDP套接字编程时,需要考虑数据的可靠性和完整性。
  2. TCP套接字编程与UDP套接字编程相比,更加稳定和可靠,因为TCP协议提供了连接的管理和数据的可靠传输。但是,TCP协议的建立连接和断开连接的过程会增加一定的开销,因此在对实时性要求较高的应用场景下,可能不太适合使用TCP套接字编程。

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

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

相关文章

基于SSM的高校班级同学录网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

maven导入无法拉取所需依赖

maven导入无法拉取所需依赖 1.原因2.解决搞定收工&#xff01; 1.原因 公司使用的是gradle&#xff0c;配置的私有云&#xff0c;maven里面配置私有云完全使用不了&#xff0c;无论配置国内还是国外的&#xff0c;导入的项目报错拉不到jar包。 <mirror><id>mirro…

倒计时1天|解锁「PolarDB开发者大会」正确打开方式

1月17日 9:30-16:30 北京嘉瑞文化中心 PolarDB开发者大会 明天就要和大家就见面啦&#xff5e; 大会参会指南现已出炉 各位开发者们&#xff0c;请查收~ &#x1f447;&#x1f447;&#x1f447; 点击 大会主页 or 扫描上方二维码 一键抵达大会官网&#x1f447; 查看…

微服务接口工具Swagger2

##1、什么是Swagger? # 官网 https://swagger.io/核心功能 生成接口说明文档生成接口测试工具 2、SpringBoot集成Swagger2 1&#xff09;、添加依赖 <!-- swagger2 --><!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><depen…

数据绑定,defineProperty,v-on,事件处理

目录​​​​​​​ v-bind单向数据绑定 defineProperty 是v-on的简写 事件处理 v-bind单向数据绑定 从name绑定到v-bind到value单向数据绑定&#xff1a; <input type"text" :value"name"> <input type "text" v-model"na…

【GCC】6 接收端实现:周期构造RTCP反馈包

基于m98代码。GCC涉及的代码,可能位于:webrtc/modules/remote_bitrate_estimator webrtc/modules/congestion_controller webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc webrtc 之 RemoteEstimatorProxy 对 remote_bitrate_estimator 的 RemoteEstimato…

线性表的应用 | 线性表的合并

线性表的合并 #include <iostream> using namespace std;#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2typedef int Status;// 定义单链表 typedef struct LNode {int data;struct LNode *next; }LNode, *…

网络文件共享服务

一.存储类型 直连式存储&#xff1a;Direct-Attached Storage&#xff0c;简称DAS 存储区域网络&#xff1a;Storage Area Network&#xff0c;简称SAN&#xff08;可以使用空间&#xff0c;管理也是你来管理&#xff09; 网络附加存储&#xff1a;Network-Attached Storage&…

代码随想录 Leetcode18. 四数之和

题目&#xff1a; 代码&#xff08;首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;sort(nums.begin(), nums.end(…

mac上部署单体hbase

1. 简介 HBase 是一个开源的、分布式的、版本化的典型非关系型数据库。它是 Google BigTable 的开源实现&#xff0c;并且是 Apache 基金会的 Hadoop 项目的一部分1。HBase 在 Hadoop Distributed File System (HDFS) 上运行&#xff0c;作为一个列式存储非关系数据库管理系统…

响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程&#xff0c;这里先记录下&#xff0c;响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系&#xff0c;它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

查看Linux系统内存、CPU、磁盘使用率和详细信息

一、查看内存占用 1、free # free -m 以MB为单位显示内存使用情况 [rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 11852 1250 8668 410 1934 9873 Swap: 601…

【Kotlin】协程的字节码原理

前言 协程是Koltin语言最重要的特性之一&#xff0c;也是最难理解的特性。网上关于kotlin协程的描述也是五花八门&#xff0c;有人说它是轻量级线程&#xff0c;有人说它是无阻塞式挂起&#xff0c;有人说它是一个异步框架等等&#xff0c;众说纷芸。甚至还有人出了书籍专门介…

Linux用户提权

新建用户 用root账户修改文件&#xff0c;添加信任用户 使用sudo提权&#xff0c;可以使用 **root删除新建账户**

各种版本对应关系:SpringCloudAlibaba——SpringCloud——SpringBoot——SpringFramework——JDK

SpringCloudAlibaba——SpringCloud——SpringBoot——SpringFramework——JDK 一般情况&#xff0c;在https://github.com/项目/wiki目录下有发布信息及对应的要求其他依赖的版本信息SpringCloudAlibaba——SpringCloud——SpringBootSpringBoot和SpringFramework的版本对应关…

Web3的应用发展及其影响

Web3&#xff0c;又被称为去中心化Web&#xff0c;是互联网发展的一个阶段&#xff0c;其核心特点是数据的去中心化和用户自主权。近年来&#xff0c;随着区块链技术的不断成熟&#xff0c;Web3的应用也得到了广泛的关注和发展。在这篇文章中&#xff0c;我们将深入探讨Web3目前…

vuex的初步使用-1

1. 介绍 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 简单讲&#xff1a;Vuex 就是一个插件&#xff0c;可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。相对于一个仓库&#xff1a;存放组件共享的数据。 2. 安装 vuex 安装vuex与vue-router类似&…

LabVIEW模拟荧光显微管滑动实验

LabVIEW模拟荧光显微管滑动实验 在现代生物医学研究中&#xff0c;对微观生物过程的精准模拟和观察至关重要。本案例展示了如何利用LabVIEW软件和专业硬件平台&#xff0c;创新地模拟荧光显微管在滑动实验中的动态行为&#xff0c;这一过程不仅提升了实验效率&#xff0c;还为…

Jenkins基础篇--添加用户和用户权限设置

添加用户 点击系统管理&#xff0c;点击管理用户&#xff0c;然后点击创建用户&#xff08;Create User&#xff09; 用户权限管理 点击系统管理&#xff0c;点击全局安全配置&#xff0c;找到授权策略&#xff0c;选择安全矩阵&#xff0c;配置好用户权限后&#xff0c;点击…

C++ 开发 + VSCode 调试

C 开发 VSCode 调试 MSYS2 安装 gcc、make下载安装MSMYS2pacman 添加镜像源 GCC1. 安装2. 查看结果3. 环境变量 GDB VSCode 调试所需插件创建项目调试代码1. tasks.json 配置任务2. launch.json 配置调试3. 运行 更进一步的 C/C 设置 参考资料 MSYS2 安装 gcc、make 下载 官…