UNIX网络编程(UNP) 第四章学习笔记

2023-10-31

总括内容

我们不妨先来看下tcp客户端/服务端程序的套接字函数

我们可以看到服务端的起始到结束包含了 socket()->bind()->listen()->read()<->write()->close()

而客户端则是socket()->connect()->write()<->read()->close()

接下来,我们顺着这个调用顺序,从socket开始讲解tcp套接字函数

socket函数
函数定义

socket函数在<sys/socket.h>里面,函数定义为

int     socket(int family, int type, int protocol);

期中family是协议族,就是指示是使用IPv4还是IPv6或者一些更特殊的协议族,常用的主要是AF_INET,AF_INET6,分别表示IPv4和IPv6

type则是套接字类型,包括字节流套接字,数据包套接字等,常用的主要是SOCK_STREAM(常用于TCP),SOCK_DGRAM(UDP)

protocol是指特定的协议,因为family和protocol一般组合起来已经可以确定协议,所以可以填0表示使用默认值,不过也可以特别用来指定使用STCP等

常用套路
int tcp_fd=socket(AF_INET,SOCK_STREAM,0);//应用于IPv4协议采用tcp
int udp_fd=socket(AF_INET,SOCK_DGRAM,0);//应用于IPv4协议采用udp
具体解释

下面是family具体可取值以及解释

family 意义
AF_INET IPv4协议
AF_INET6 IPv6协议
AF_LOCAL unix域协议
AF_ROUTE 路由套接字
AF_KEY 秘钥套接字

下面则是type具体可取值以及解释

type 意义
SOCK_STREAM 字节流套接字,常用于TCP
SOCK_DGRAM 数据包套接字,常用于UDP
SOCK_SEQPACKET 有序分组套接字,常用于SCTP
SOCK_RAW 原始套接字,可以认为是IP层

我们之前提到两两组合的可能性,下面是特定的family和type组合后的结果,空格表示不可组合

AF_INET AF_INET6 AF_LOCAL AF_ROUTE AF_KEY
SOCK_STREAM TCP/SCTP TCP/SCTP 可用
SOCK_DGRAM UDP UDP 可用
SOCK_SEQPACKET SCTP SCTP 可用
SOCK_RAW IPv4 IPv6 可用 可用

下面是protocol的具体取值,可以看到就是tcp,udp和sctp

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

UNIX网络编程(UNP) 第四章学习笔记 的相关文章

  • 用户的完整 UNIX 用户名

    想知道您是否知道是否有一种巧妙的方法可以从 shell 获取完整的用户名 示例 如果我的 UNIX 用户名是 froyo 那么我想获取我的全名 在本例中 如系统中注册的那样 froyo Abhishek Pratap Finger 命令可以
  • 在 UNIX 中删除相同的文件

    我正在处理大量 30 000 个 大小约为 10MB 的文件 其中一些 我估计 2 实际上是重复的 我只需要为每个重复的对 或三元组 保留一个副本 您能建议我一种有效的方法吗 我正在unix上工作 您可以尝试使用此代码片段在删除之前先获取所
  • 直接向pbs脚本传递参数

    有没有办法在提交作业之前直接将参数传递给 pbs 脚本 我需要循环遍历由不同数字表示的文件列表 并应用脚本来分析每个文件 我能想到的最好的办法如下 bin sh for i 1 i lt 10 i do export FILENUM i q
  • 如何在 sed 中用“pwd”的结果替换令牌?

    我正在尝试做这样的事情 sed s REPLACE WITH PATH pwd 不幸的是 我出错了 sed e expression 1 char 23 unknown option to s 为什么会发生这种情况 您需要使用不同的字符而不
  • #*/ 在 UNIX Shell 脚本中使用

    谁能详细说明 在 UNIX Shell 脚本中的工作原理 我已经看到它在 Korn Shell 中的使用 它专门用于删除文件的扩展名 例如 func write app log o 删除状态文件 CIE STATUS FILE 这里假设文件
  • 关闭 python 后让进程保持运行

    我希望在终止原始进程后继续运行进程 以下代码在终止原始进程后不会使其进程保持运行 args yes Popen args shell True stdout None stdin None stderror None 我已经尝试了我能想到的
  • 相当于 UNIX diff 和 patch 的本机 PowerShell

    我需要潜在地修补文件作为脚本的一部分 为了使脚本所做的事情更具可读性 我想以类似于 UNIX diff 和 patch 方法的方式来实现它 在标准 UNIX 系统上 diff 可以生成特殊格式的文本文件 表示两个文件之间的差异 这可以与要修
  • Unix shell脚本找出脚本文件所在的目录?

    基本上我需要使用与 shell 脚本文件位置相关的路径运行脚本 如何将当前目录更改为与脚本文件所在的目录相同 在 Bash 中 你应该得到你需要的东西 如下所示 usr bin env bash BASEDIR dirname 0 echo
  • 如何使用 Perl 在 Unix 中获取文件创建时间

    如何使用 perl 在 unix 中获取文件创建时间 我有这个命令显示文件的最后修改时间 perl MPOSIX le print strftime d b Y H M localtime lstat 9 for ARGV file txt
  • 未创建 .ssh 目录

    生成 sshdir 我使用这个命令 ssh keygen 摘自本教程 http ebiquity umbc edu Tutorials Hadoop 05 20 20Setup 20SSHD html http ebiquity umbc
  • Git - 致命:无法获取当前工作目录?

    When I git clone从回购协议中 我得到 fatal Could not get current working directory No such file or directory 我该怎么办 我检查了服务器并发现 git文
  • 如何将文本数据从 ruby​​ 控制台传递到剪贴板而不保存到文件?

    我试图将我创建的全局变量中包含的数组传递到我的 mac 上的剪贴板中 它很长 所以我不想在控制台上突出显示 复制和粘贴 我想使用嵌入式unix代码 特别是pbcopyMac 笔记本电脑控制台的功能 允许我将文本传递到我的计算机剪贴板中 准备
  • 将 cron 作业配置为在 Jenkins 上每 15 分钟运行一次

    如何在 Jenkins 上每 15 分钟运行一次 cron 作业 这是我尝试过的 在 Jenkins 上 我使用以下 cron 语法设置了每 15 分钟运行一次的作业 14 但该作业每小时执行一次 而不是 15 分钟 我收到有关 cron
  • 使用终端(或 Shell)将文件的一部分复制/粘贴到另一个文件中

    我正在尝试将 txt 文件的一部分从行号 n 复制到行号 n y 假设 1000 到 1000000 我尝试过与运营商合作sed 并且失败了 这是我尝试过的命令 sed n 1000 1000000p path first file gt
  • 如何在 Linux/Unix 上根据文件类型添加文件扩展名?

    这是一个关于 Unix shell 脚本 任何 shell 的问题 但任何其他 标准 脚本语言解决方案也将受到赞赏 我有一个充满文件的目录 其中文件名是这样的哈希值 fd73d0cf8ee68073dce270cf7e770b97 fec8
  • shell 脚本中的 Telnet

    如何在 shell 脚本中运行 telnet 并在远程服务器上执行命令 出于安全原因 我没有在我的Solaris 机器上安装expect 我也没有perlnet telnet模块已安装 那么如果不使用expect和perl我该怎么办呢 我尝
  • 如何从 Unix 文件中删除空行

    我需要从输入文件中删除所有空白行并写入输出文件 这是我的数据如下 11216 33 1032747 64310 1 0 0 1 878 0 0 0 1 1 1 087 5 1 1 18 JAN 13 000603221321 11216 3
  • pyvenv-3.4 返回非零退出状态 1

    我在 Kubuntu 14 04 我想用 python3 4 创建一个 virtualenv 我之前在其他文件夹中使用过 python2 7 但是当我尝试时 pyvenv 3 4 venv 我有 Error Command home fmr
  • 在进行 sem_timedwait 时,我将如何应对系统时间的变化?

    假设我有一个使用的程序sem timedwait为了等待 100 毫秒 获取当前时间 添加 100 毫秒 将结果用作abs timeout 参见手册页 http man7 org linux man pages man3 sem wait
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN

随机推荐

  • 2023年新自采集壁纸网页源码+简约大气

    正文 一款壁纸网页源码 但这款源码是有网友改了一下接口 但还是挺不错的 有兴趣的可以自己去搭建体验 我也搭建了演示站 感觉挺行 界面美观大气 壁纸也很多 类型也比较多 程序 wwidsu lanzout com i3ZHQ0f7dqli 图
  • Hibernate --- hibernate.cfg.xml核心配置文件详解

    一 Hibernate配置文件加载流程 1 通过Configuration config new Configuration configure 加载默认配置文件 2 Configuration的configure 方法 注意 hibern
  • LeetCode总结 -- 图篇

    图的算法跟树一样是准备面试中必不可少的一块 不过图的方法很容易概括 面试中考核的无非就是两种搜索算法 深度优先搜索和广度优先搜索 LeetCode中关于图的问题有以下几个 Clone Graph Word Ladder Word Ladde
  • 【华为OD机试真题】不含101的数(python版)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 不含101的数 时间限制 1s空间限制 256MB限定语言 不限 题目描述 小明在学习二进制
  • 堪称一绝,阿里技术人都用的Nginx笔记手册,应用到架构齐全

    有人调侃我们说 程序员不如送外卖 送外卖是搬运食物 自己是搬运代码 都不产出新的东西 透支体力 又消耗健康 可替代性极强 30岁之后就要面临被优化的危险 想跳槽 但是更高的平台难进 同级别的平台又是重复 想利用业余时间学习提升 但是自己能力
  • mininet+pox+poxdesk使用入门

    mininet pox poxdesk使用入门 前提是安装好mininet以及pox和poxdesk模块 接下来就是如何使用 笔者环境是Win7环境下VMware Workstation新建虚拟机上运行Ubuntu 12 0 首先在新打开的
  • 面试题(vue,react,前端)

    目录 1 说说React生命周期中有哪些坑 如何避免 2 说说Real diff算法是怎么运作的 3 调和阶段setState干了什么 4 说说redux的实现原理是什么 写出核心代码 5 React合成事件的原理 6 React组件之间如
  • java后端生成图形验证码、前端接收并展示

    1 工具类 import java awt Color import java awt Font import java awt Graphics import java awt Graphics2D import java awt Ren
  • PHP中的数据类型有哪些?

    嗨 大家好 今天 我们来了解一下PHP中的数据类型 首先 让我们来介绍一下PHP中的基本数据类型 在PHP中 有六种基本数据类型 它们分别是 整数型 int 用于存储整数 例如 123 456等 浮点型 float 用于存储带有小数点的数
  • Linux删除文件后,发现磁盘空间没有释放-lsof

    最近碰到磁盘快满了 原因是程序错误导致日志爆炸性增长 于是直接删除日志文件 然后df h 发现磁盘空间一点都没下降 还是原来的90 使用率 有点奇怪 百度了解到 日志文件被删除之前文件处于被其他进程占用状态 即使删除 依然占用空间 通过ls
  • STL源码分析:sort函数

    目录 支持sort的容器 几种涉及到的排序算法 插入排序 快速排序 堆排序 sort函数的策略 sort函数的实现 STL的sort函数非常常用 不同的STL版本有不同的实现方式 本文就来说一下SGI STL中是如何实现sort函数的 so
  • 408计算机网络(王道版)

    408计算机网络第一章总结 408计算机网络第二章总结 408计算机网络第三章总结 408计算机网络第四章总结 408计算机网络第五章总结 408计算机网络第六章总结 408计算机网络第一轮反思
  • QHash 与 QMap的区别

    QMap QMap是Qt的一个模板类 它是基于红黑树算的的一套字典 是Qt容器中的一种 它的原型是 QMap原型为class QMap
  • 2023.01.11 某国企前端笔试题一部分

    什么时候开始记录都不算晚 即使已经是晚了 但是再早的东西也会有淘汰的时候 收藏另说 问题主要选取一些高频和基础的问题 问题的回答只是本人的理解 非参考答案 有些答案只给个提示 详解可谷歌百度或在掘金内搜索相关文章 同时本人每次回顾更新文章都
  • 大数据-玩转数据-Flink定时器

    一 说明 基于处理时间或者事件时间处理过一个元素之后 注册一个定时器 然后指定的时间执行 Context和OnTimerContext所持有的TimerService对象拥有以下方法 currentProcessingTime Long 返
  • MYSQL面试题

    1 什么是MySQL多实例 如何配置MySQL多实例 多实例的优缺点 答案 https blog 51cto com superpcm 2094744 2 如何加强MySQL数据的安全 请你给出可行的思路 答案 https blog csd
  • 李开复李彦宏奥特曼获评全球AI领袖,《时代》出品,全球100人

    西风 发自 凹非寺量子位 公众号 QbitAI 时代周刊 首次发布世界AI最具影响力人物榜 100位学界业界大佬齐聚于此 这其中就包括吴恩达教授 李飞飞教授 创新工场CEO李开复 百度CEO李彦宏 OpenAI CEO Sam Altman
  • 【软件测试】快速入行软件测试

    快速入行软件测试 1 初识软件测试 软件测试的前景与现状 软件测试越来越被企业重视 人才稀缺 市场需求扩大 软件测试人员的职业生涯规划 技术型路线 自动化测试工程师 性能测试工程师 安全测试工程师等 管理型路线 测试主管 测试经理 测试总监
  • 解决Python配置Opencv报错recursion is detected during loading of "cv2" binary extensions的问题

    解决Python配置Opencv报错recursion is detected during loading of cv2 binary extensions的问题 使用pip卸载opencv pip uninstall opencv 具体
  • UNIX网络编程(UNP) 第四章学习笔记

    文章目录 总括内容 socket函数 函数定义 常用套路 具体解释 题外话 connect函数 函数定义 常用套路 具体解释 题外话 实战尝试 bind函数