套接字编程简介

news2024/12/24 20:28:57

作者:V7

博客:https://www.jvmstack.cn

一碗鸡汤

  少年辛苦终身事,莫向光阴惰寸功。  ——  杜荀鹤

Socket概述

  在计算机中产生和接受IO流的数据源是多种多样的,在网络编程中,有一个特殊的数据源就是socket。通俗点socket类似于日常生活中的电源插座,链接电源插座接收的是电流,在网络编程中,连接socket接收的就是数据流或者IO流

socket网络通信

  那么我们怎么理解socket在网络编程中扮演的角色呢?我们可以从几个不同的层次来理解。

  从高一点的层次或者概括性的层次来说,可以认为socket是所有网络通信的一个端点,如下图所示:

基于socket的网络通信

  上图中服务器端和客户端基于IP和端口进行通信的一个端点我们就把它称为一个socket。

  在Unix中socket是什么?

  在Linux环境下,用于表示进程x间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是文件主要应用于本地持久化数据的读写,而套接字多应用于网络进程间数据的传递。

  在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。因此可以用Socket来描述网络连接的一对一关系。

TCP套接字编程

  典型的网络应用是由一对程序(客户端程序和服务器端程序)组成的,它们位于两个不同的端系统中。开发人员在创建一个网络应用时,其实就是在编写客户端和服务端的程序代码。当运行这两个程序时,就是创建了一个客户端程序进程和服务端程序进程,同时它们通过从套接字读出和写入数据进行彼此通信。

  网络应用程序有两类。一类是实现在协议标准(如一个RFC或某种其他标准文档)中所定义的操作;这样的应用程序又称为“开放”的。

  另一种网络应用程序时专用的网络应用程序。这种情况下的客户和服务器程序应用的应用层协议没有公开发布在某RFC中或其他地方。

UDP套接字编程

  运行在不同机器上的进程彼此通过套接字发送报文来进行通信。每个进程好比是一座房子,该进程的套接字则好比是一扇门。应用程序位于房子中门的一侧;运输层位于该门朝外的另一侧。应用程序开发者在套接字的应用层一侧可以控制所有东西;然而它几乎无法控制运输层一侧。

  下图主要显示了客户和服务器的主要与套接字相关的活动,两者通过UDP运输服务进行通信。

使用UDP的客户-服务器应用程序


  了解实时技术文章,关注编程之艺术一起学习、进步。
编程之艺术公众号

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

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

相关文章

linux的系统日志

目录 一、日志文件的产生 二、日志文件存放在哪儿 (1)文本日志 (2)二进制日志 三、日志存放规则的配置文件 四、日志轮转 五、分析和监控日志 一、日志文件的产生 日志内容:内核、开机引导、守护进程启动运行的…

华为和思科两种常见的网络设备如何进行ospf配置?

概述 ospf(开放最短路径优先)是一种基于链路状态的动态路由协议,它可以在网络中自动发现和维护最优的路由路径。ospf广泛应用于大型和复杂的网络环境,因为它具有以下优点: 支持分层路由,可以将网络划分为…

WebAssembly黑暗的一面

案例1:技术支持诈骗 什么是技术支持诈骗? 技术支持诈骗是一种电话欺诈,其中诈骗者声称可以提供合法的技术支持服务。该骗局可能以陌生电话开始,骗子通常会声称来自合法的第三方的员工,如“微软”或“Windows部门”。他…

YOLOv5实现目标分类计数并显示在图像上

有同学后台私信我,想用YOLOv5实现目标的分类计数,因此本文将在之前目标计数博客的基础上添加一些代码,实现分类计数。阅读本文前请先看那篇博客,链接如下: YOLOv5实现目标计数_Albert_yeager的博客 1. 分类实现 以co…

web 实验一 HTML基本标签实验

实验原理 通过创建HTML5网页,验证form内多种元素标签及其属性的作用及意义。 实验目的 理解并掌握Form表单提交必须声明的内容 理解并掌握Input元素中多种类型属性的使用方法及使用场景 理解并掌握Label元素的使用方法 理解并掌握Datalist元素的使用方法 理解并掌握…

软件测试学习——笔记一

一、软件和软件测试 1、软件和软件分类 (1)软件:程序、数据、文档——用户手册 (2)软件的分类 按层次划分:系统软件、应用软件按组织划分:开源软件(代码公开)、商业软…

RSA 加密算法在C++中的实现 面向初学者(附代码)

概述 博文的一,二部分为基础知识的铺垫。分别从密码学,数论两个方面为理解RSA算法做好了准备。第三部分是对RSA加密过程的具体介绍,主要涉及其密钥对(key-pair)的获取。前三个部分与编程实践无关,可以当作…

C# | 内存池

内存池 文章目录 内存池前言什么是内存池内存池的优点内存池的缺点 实现思路示例代码结束语 前言 在上一篇文章中,我们介绍了对象池的概念和实现方式。对象池通过重复利用对象,避免了频繁地创建和销毁对象,提高了系统的性能和稳定性。 今天我…

你真的了解索引吗

当我们学习存储算法和索引算法时,他们可以深入了解如何在系统中存储和查询数据。因为存储和查询数据是许多系统的核心功能之一,例如数据库、搜索引擎等。理解这些算法可以帮助程序员更好地设计和优化系统架构,提高系统的可扩展性、可用性和性…

玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

一、前言 这篇文章主要总结gtest中的所有断言相关的宏。 gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。一个直观的解释就是: 1. ASSERT_* 系列的断言,当检查点失败时,退出当前…

大数据之光:Apache Spark 实用指南 大数据实战详解【上进小菜猪大数据】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 本文将深入探讨Apache Spark作为一种强大的大数据处理框架的基本概念、特点和应用。我们将详细介绍Spark的核心组件,包括Spark Core、Spark SQL、Spark Streaming和Spa…

百子作业 —— 中国邮递员问题

题目 严老师和宋老板去勘测武威市区的道路网,每一条路都需要勘测,且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网,自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路;自北向南依次为雷海路、宣武路、祁…

Redis基本数据类型及使用(2)

书接上回,这节讲讲其余的基本数据结构使用 集合,有序集合以及遍历和事务的使用 Set集合,无序不重复的成员 表现形式: key1string1string2key2string1string2 常用的基本操作: sadd key string1 [string2..]添加1…

第二十届宁波大学程序设计竞赛(同步赛)

A-0-1翻转_第二十届宁波大学程序设计竞赛(同步赛) (nowcoder.com) 思路: 我们观察发现,奇数位与偶数位的1每次操作一定时同时增加或者减少的,我们无法做到同时删除奇数位的两个1.。不满足相等则情况无解那么&#xf…

【谷粒商城之订单服务-支付】

本笔记内容为尚硅谷谷粒商城订单服务支付部分 目录 一、支付宝沙箱 沙箱环境 二、公钥、私钥、加密、加签、验签 1、公钥私钥 2、加密和数字签名 3、对称加密和非对称加密 三、内网穿透 四、整合支付 1、导入支付宝SDK依赖 2、封装工具类和PayVo 3、前端访问支付接…

python汉诺塔编程代码

汉诺塔问题是一个经典的递归问题。以下是使用Python实现汉诺塔的一个简单方法: python def hanoi(n, source, target, auxiliary): if n > 0: # 把 n-1 个盘子从 source 移动到 auxiliary hanoi(n-1, source, auxiliary, target) # 把第 n 个盘子从 source 移动到…

三十四、服务治理、实现负载均衡、

1、服务治理介绍 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题: l 一旦服务提供者地址变化…

浪潮之巅第一章 — 帝国的余辉(ATT)(一) 阅读笔记

在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。 从一百年前算起,AT&T 公司、IBM 公司、苹果公司 (Apple)、英特尔 (Intel) 公司、微软 (Microsoft) 公司、思科公司 (Cisco) 公司、雅虎 (Yahoo) 公司和谷歌 (Google) 公司都先…

相见恨晚的Matlab编程小技巧(2)-代码怎么做到逻辑清晰?——巧用注释符“%“

本文将以教程的形式详细介绍Matlab中两个常用符号“%”和“%%”的作用。初学者可以通过此文掌握这两个符号的用法,为Matlab编程打下坚实的基础。 一、什么是“%”符号? 在 Matlab 中,“%” 符号是注释符号,它后面的文本被视为注释…

GEE:下载MODIS海表温度影像

作者:CSDN @ _养乐多_ 本篇博客将介绍如何使用Google Earth Engine(GEE)平台下载MODIS(Moderate Resolution Imaging Spectroradiometer)海表温度影像数据。MODIS是一种遥感传感器,用于监测地球表面的温度变化。我们将展示如何获取MODIS数据集,并选择特定感兴趣区域进行…