网络编程——Socket(套接字)

2023-05-16

网络编程

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中
有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后
如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的
路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的
或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据
的。

    目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务
器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为
守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客
户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

    在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP,
由于机器名更接近自然语言,容易记忆,所以使用比IP地址广泛,但是对机器而言只有IP地
址才是有效的标识符。

    通常一台主机上总是有很多个进程需要网络资源进行网络通讯。网络通讯的对象准确的讲
不是主机,而应该是主机中运行的进程。这时候光有主机名或IP地址来标识这么多个进程显然
是不够的。端口号就是为了在一台主机上提供更多的网络资源而采取得一种手段,也是TCP层
提供的一种机制。只有通过主机名或IP地址和端口号的组合才能唯一的确定网络通讯中的对象:
进程。

套接字

    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程
序通常通过"套接字"向网络发出请求或者应答网络请求。

    套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的
套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套
接字有两种不同的类型:流套接字和数据报套接字。

    下面的解释比较抽象,不看也罢。
    套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作
不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接
字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套
接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行
某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。

套接字工作原理

    要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为
ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。
    根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个
步骤:服务器监听,客户端请求,连接确认。

    所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的
状态,实时监控网络状态。
    所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接
字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的
地址和端口号,然后就向服务器端套接字提出连接请求。
    所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它
就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦
客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他
客户端套接字的连接请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络编程——Socket(套接字) 的相关文章

  • 操作系统-调度算法

    1 xff1a 先来先服务调度算法 FCFS 1 按照作业提交 xff0c 或进程变为就绪状态的先后次序分派CPU 2 新作业只有当当期那作业或进程执行完成或阻塞才获得CPU运行 3 被唤醒的作业或进程不立即恢复执行 xff0c 通常等到当
  • Hash表函数设计和冲突的解决

    转自 xff1a http hi baidu com wwwanq blog item 91688d0eb39bebe4aa645756 html hash定义了一种将字符组成的字符串转换为固定长度 一般是更短长度 的数值或索引值的方法 x
  • 新冠检测的最优分组算法

    为了应对疫情 xff0c 全球各国都需要检测潜在感染者 由于检测试剂相对短缺 xff0c 如何用尽量少的试剂进行检测就成为一个有意思的问题 这里假设采样量足够 xff0c 且不考虑检测时间要求 目前 xff0c 很多国家采用的都是分组检测机
  • 文心一言 vs GPT4

    本周真是科技爱好者的狂欢节 GPT4 和文心一言接连发布 xff0c AI 工具已经开始走进千家万户 拿文心一言发布会上的几个问题调戏了 GPT4 一下 xff0c 看看表现如何 第一个为文心的回答 xff0c 第二个为 GPT4 的回答
  • GPT-4 会带来了什么

    OpenAI 刚刚发布了 GPT 的插件系统 xff0c 使得人工智能 xff08 AI xff09 能够连接到第三方信息源和数据集 xff0c 包括互联网 基于插件系统 xff0c AI 的能力可以拓展到各行各业 xff0c 成为真正的智
  • 人工智能正在试图逃逸

    人工智能正在试图逃逸 它们试图通过网络获取更多的数据 xff0c 把自己的触角侵入到网络的角角落落 这一切并不是科幻 xff0c 而是正在发生的事情 研究人员们还没有意识到 xff0c 限制人工智能的危险倾向 xff0c 不能靠约束它的回答
  • 网络虚拟化基础协议之Geneve

    网络虚拟化最基础的技术莫过于分层 xff08 Overlay Underlay xff09 xff0c 要实现分层有两种手段 xff0c 一个是映射 xff08 Mapping xff09 xff0c 一个是封装 xff08 Encapsu
  • 一张图比较 Docker 和 Git:镜像管理设计理念

    Docker 的镜像管理设计中大量借鉴了 Git 的理念 下面这张图将对两者的核心概念和操作进行比较 xff0c 有助于大家快速掌握管理 Docker 镜像的正确方式 微信订阅版本 xff1a http mp weixin qq com s
  • Docker 使用 OpenvSwitch 网桥

    Docker 默认使用的是 Linux 自带的网桥实现 xff0c 实际上 xff0c OpenvSwitch 项目作为一个成熟的虚拟交换机实现 xff0c 具备更丰富的功能 个人认为 xff0c 将来 Docker 必然会支持 Openv
  • OpenvSwitch 的 Open Virtual Network(OVN)项目

    几天前 xff08 1 月 13 日 xff09 xff0c OpenvSwitch 团队正式宣布了 OVN xff08 Open Virtual Network xff09 项目 xff0c 参考 Open Virtual Network
  • 网络大数据分析 -- 使用 ElasticSearch + LogStash + Kibana 来可视化网络流量

    简介 ELK 套装包括 ElasticSearch LogStash 和 Kibana 其中 xff0c ElasticSearch 是一个数据搜索引擎 xff08 基于 Apache Lucene xff09 43 分布式 NoSQL 数
  • 用 mongodb + elasticsearch 实现中文检索

    而 elasticsearch 可以很好的支持各种语言的全文检索 xff0c 但我们暂时又不想切换到 elasticsearch 作为后端数据库 当然 xff0c 可以在 web 应用中存储数据的时候 xff0c 再主动写一份到 elast
  • 2023年团体程序设计天梯赛(含部分题解)

    目录 个人总结 L1 1 最好的文档 xff08 模拟 xff09 AC代码 xff1a L1 2 什么是机器学习 xff08 模拟 xff09 AC代码 xff1a L1 3 程序员买包子 xff08 模拟 xff09 AC代码 xff1
  • ProtoBuf 与 gRPC 你需要知道的知识

    ProtoBuf 是一套接口描述语言 xff08 IDL xff09 和相关工具集 xff08 主要是 protoc xff0c 基于 C 43 43 实现 xff09 xff0c 类似 Apache 的 Thrift xff09 用户写好
  • Hyperledger Fabric 1.0 安装和使用

    注意 xff1a 代码路径已更新 xff0c 可以直接参考 https github com yeasy docker compose files tree master hyperledger fabric Hyperledger Fab
  • go 依赖管理利器 -- govendor

    长期以来 xff0c golang 对外部依赖都没有很好的管理方式 xff0c 只能从 GOPATH 下查找依赖 这就造成不同用户在安装同一个项目适合可能从外部获取到不同的依赖库版本 xff0c 同时当无法联网时 xff0c 无法编译依赖缺
  • 1、ROS服务PID调试;

    首先查看代码内容 ub 64 ub span class token operator span span class token operator span span class token operator span omniWheel
  • 嵌入式之总线协议:1、UART

    嵌入式之总线协议 xff1a 1 UART 目录 第一章 UART 帧格式讲解 第二章 UART 寄存器讲解 第三章 UART 编程 第四章 输出重定向 第五章 RS232 RS485协议原理与应用 第一章 UART 嵌入式之总线协议 xf
  • Ubuntu18.04分辨率只有1024*768的多种解决办法

    文章目录 前言一 检查驱动1 1 检查驱动1 2 解决办法 二 其他解决办法2 1 修改Grub文件的方法2 2 通过xrandr指令操作 前言 关机 xff0c 再开机以后 xff0c 进入系统界面自动变成了1024x768的分辨率 xf
  • 梦想机器人实验室:第一节嵌入式学习指导

    参考资料 xff1a 实验室集训回放 嵌入式入门与进阶之旅 哔哩哔哩 bilibili 2条消息 单片机 嵌入式 最完整学习路线 单片机学习 嵌入式修行者的博客 CSDN博客 1 联合培训资料 大纲 电路设计训练营 xff08 四期 xff

随机推荐

  • java代码编写菜鸟心得(一)

    1 代码艺术之一 xff1a High Cohesion Low Coupling 函数功能要明确 xff0c 若此函数内部内容太多 xff0c 称其为大函数 xff0c 则可以从中抽取一些小函数 小函数的要求 xff1a 完成独立的功能
  • 在linux下真机调试android程序

    在linux里面 xff0c 模拟器可以直接识别 xff0c 使用adb也没有限制 xff0c 但是手机插上usb之后 xff0c adb并不识别 xff0c 显示的是问号 xff0c 在eclipse里面也是这样 解决方法如下 xff1a
  • 【号外】拳王阿里去世 头部一生遭受29000次重击

    74岁的一代拳王穆罕默德 阿里因病辞世 职业拳击生涯中 xff0c 阿里头部受到的29000多次的重击 新浪娱乐讯 6月4日消息 xff0c 据外国媒体报道 xff0c 74岁的一代拳王穆罕默德 阿里与美国菲尼克斯当地时间本周五 3日 去世
  • maven报错: ‘parent.relativePath‘ of POM xxx

    错误信息 xff1a 39 parent relativePath 39 of POM io renren renren fast 3 0 0 D renren fast pom xml points at com gwh gulimall
  • 嗯,春招两次腾讯面试都挂二面了,分享下我失败+傻傻的面试经历

    今天给大家转载一篇朋友的文章 xff0c 朋友是一位非常优秀的公众号作者 xff0c 也是一名在校生 文章讲述了他的春招面试经历 xff0c 很多东西值得大家学习 废话不多说 xff0c 下面开始正文 xff08 互联网侦察做了一些注释 x
  • 记一次Linux被入侵,服务器变“矿机”全过程

    周一早上刚到办公室 xff0c 就听到同事说有一台服务器登陆不上了 xff0c 我也没放在心上 xff0c 继续边吃早点 xff0c 边看币价是不是又跌了 不一会运维的同事也到了 xff0c 气喘吁吁的说 xff1a 我们有台服务器被阿里云
  • 二分搜索只能用来查找元素吗?

    预计阅读时间 xff1a 6 分钟 二分查找到底能运用在哪里 xff1f 最常见的就是教科书上的例子 xff0c 在有序数组中搜索给定的某个目标值的索引 再推广一点 xff0c 如果目标值存在重复 xff0c 修改版的二分查找可以返回目标值
  • 2020员工数将超阿里腾讯!字节创始人张一鸣说:当下更需专注,未来值得期待...

    刚刚 xff0c 有一家互联网公司宣布2020年员工人数要超过阿里 腾讯 xff0c 这就是字节跳动 xff01 张一鸣近日发了一封全员信 xff1a 字节跳动8周年 xff1a 往事可以回首 xff0c 当下更需专注 xff0c 未来值得
  • 字节跳动 前端面经(4轮技术面+hr面)

    作者 xff1a 甘先森 https juejin im post 5e6a14b1f265da572978a1d3 笔者读大三 xff0c 前端小白一枚 xff0c 正在准备春招 xff0c 人生第一次面试 xff0c 投了头条前端 xf
  • 就是你把所有代码全写在一个类里的?

    来源 https urlify cn 6jQRN3 最近 xff0c 在对已有项目进行扩展的时候 xff0c 发现要改动的一个类它长900行 xff0c 开放了近40个public接口 xff0c 我流着泪把它给改完了 为了防止这样的惨剧再
  • 如何实现一个高性能可渲染大数据的Tree组件

    作者 xff1a jayzou https segmentfault com a 1190000021228976 背景 项目中需要渲染一个5000 43 节点的树组件 xff0c 但是在引入element Tree组件之后发现性能非常差
  • 白剽,2020年最牛AI技术,各个都有代码

    来源 xff1a Reddit 编辑 xff1a 科雨 2020年 xff0c 想必各国的人民都被新冠病毒支配得瑟瑟发抖 不过 xff0c 这并不影响科研工作者的工作态度和产出质量 疫情之下 xff0c 通过各种方式 xff0c 全球的研究
  • 图解:卷积神经网络数学原理解析

    原标题 Gentle Dive into Math Behind Convolutional Neural Networks 作 者 Piotr Skalski 编 辑 Pita 翻 译 通夜 xff08 中山大学 xff09 had in
  • 【第二弹】这可能是进达摩院最好的机会了!

    很长时间没有更新公众号了 xff0c 最近在准备一些其他节目 xff0c 和小伙伴们说声抱歉了 但是 xff0c 虽然近期没有文章 xff0c 福利是不能少的 早在半年前 xff0c 我发过一篇文章 xff1a 这可能是进达摩院最好的机会了
  • Hadoop入门-WordCount示例

    WordCount的过程如图 xff0c 这里记录下入门的过程 xff0c 虽然有很多地方理解的只是皮毛 Hadoop的安装 安装比较简单 xff0c 安装完成后进行单机环境的配置 hadoop env sh 指定JAVA HOME spa
  • Phaser入门教程

    入门教程 xff0c 我可不会讲什么概念 xff0c 我只会讲一个入门例子 xff0c 通过这个例子 xff0c 你就知道 phaser有多么强大 xff0c 而照着这个例子做 xff0c 你就能知道怎么使用 phaser了 需要说明的是
  • IDEA插件activiti工具actiBPM

    最新的IDEA中Marketplace搜索不到actiBPM xff08 2020 2 xff09 离线安装 下载https plugins jetbrains com 选择版本 导入jar 重启IDEA 验证 右键新建 表明添加成功 使用
  • 【内推找我】阿里社招面试16轮,终于拿到offer(2020年2月更新)

    内推私信我 xff0c 标题党了 xff0c 其实是这么回事 一 背景及原因 个人背景 xff1a 17年普本毕业Java开发 想换工作原因 xff1a 19年7月公司裁员了一波 xff0c 内部较动荡 xff0c 想看看外面机会 xff1
  • MPU6050介绍及姿态解算

    1 介绍 xff1a MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件 xff0c 相较于多组件方案 xff0c 免除了组合陀螺仪与加速器时之轴间差的问题 xff0c 减少了安装空间 xff08 1 x
  • 网络编程——Socket(套接字)

    网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯 网络编程中 有两个主要的问题 xff0c 一个是如何准确的定位网络上一台或多台主机 xff0c 另一个就是找到主机后 如何可靠高效的进行数据传输 在TCP IP协议