socket()、bind()、listen()、htons()

socket()

socket() 是一个系统调用函数,用于创建一个套接字(socket),通过该套接字进行网络通信。在这段代码中,socket() 函数被用于创建一个本地套接字。

具体来说,这是 socket() 在代码中的使用方式:

fd = socket(AF_INET, SOCK_STREAM, 0);
  • AF_INET 是指定的协议簇,表示使用 IPv4 地址簇。
  • SOCK_STREAM 是指定的套接字类型,表示使用 TCP 进行可靠的流式传输。
  • 0 是指定的协议类型,根据指定的协议簇和套接字类型,系统会选择合适的默认协议。

socket() 函数的作用是创建一个新的套接字,并返回一个套接字文件描述符,用于后续的操作。

如果 socket() 调用成功,返回值为非负整数,表示创建的套接字文件描述符;否则返回值为 -1,表示创建套接字失败。

需要注意的是,创建套接字之后,我们还需要通过调用 bind() 函数将其与特定的地址和端口进行绑定,并调用 listen() 函数开始监听连接请求,或者使用 connect() 函数连接到远程服务器,才能进行进一步的通信操作。同时,在使用完套接字后,需要调用 close() 函数关闭套接字以释放资源。

bind()

bind() 是一个系统调用函数,用于将一个套接字(socket)与特定的 IP 地址和端口号进行绑定。在这段代码中,bind() 函数被用于将套接字 fd 绑定到指定的地址和端口上。

具体来说,这是 bind() 在代码中的使用方式:

ret = bind(fd, (struct sockaddr*)&svrAddr, sizeof(struct sockaddr));
  • fd 是之前通过 socket() 函数创建的套接字文件描述符。
  • (struct sockaddr*)&svrAddr 是一个指向要绑定的目标地址结构体的指针。在这段代码中,svrAddr 是一个类型为 struct sockaddr_in 的变量,其中包含了要绑定的地址和端口信息。
  • sizeof(struct sockaddr) 是目标地址结构体的大小。

bind() 函数的作用是让操作系统将指定的套接字与指定的地址进行关联,使得该套接字可以监听并处理来自该地址和端口的数据。如果 bind() 调用成功,返回值为 0;否则返回值为 -1,表示绑定失败。

需要注意的是,在绑定之前,我们需要先设置好 svrAddr 结构体的相关字段,比如协议簇、端口号和 IP 地址等。在这段代码中,使用 bzero(&svrAddr, sizeof(svrAddr)) 来将 svrAddr 清零,并设置 svrAddr.sin_familyAF_INET 表示使用 IPv4 地址簇,svrAddr.sin_port 为指定的端口号,svrAddr.sin_addr.s_addrhtonl(INADDR_ANY) 表示绑定所有可用的网络接口。

如果 bind() 调用失败,通常需要进行错误处理,并关闭套接字。

listen()

listen() 是一个系统调用函数,用于将一个已绑定的套接字(socket)设置为监听状态,以便可以接受来自客户端的连接请求。在这段代码中,listen() 函数被用于将套接字 fd 设置为监听状态。

具体来说,这是 listen() 在代码中的使用方式:

ret = listen(fd, 10);
  • fd 是之前通过 socket()bind() 函数创建并绑定的套接字文件描述符。
  • 10 是指定的连接队列的最大等待连接数。

listen() 函数的作用是告诉操作系统,套接字 fd 应该开始监听连接请求。当有新的客户端连接请求到达时,操作系统会将其加入到连接队列中,等待服务器程序调用 accept() 函数接受连接。

如果 listen() 调用成功,返回值为 0;否则返回值为 -1,表示监听失败。

需要注意的是,在调用 listen() 之前,我们需要先通过 bind() 将套接字与特定的地址和端口进行绑定。同时,需要合理设置连接队列的大小,以确保能够处理所有的连接请求。在这段代码中,设置连接队列最大容量为 10。

如果 listen() 调用失败,通常需要进行错误处理,并关闭套接字。

#htons()
htons() 是一个函数,用于将无符号短整型数据(16位)从主机字节顺序转换为网络字节顺序。在这段代码中,htons() 函数被用于将端口号从主机字节顺序转换为网络字节顺序。

具体来说,这是 htons() 在代码中的使用方式:

svrAddr.sin_port = htons(10083);
  • 10083 是指定的端口号,表示要绑定的监听端口。

htons() 函数的作用是将端口号从主机字节顺序转换为网络字节顺序。网络字节顺序是一种统一的字节序,它不受不同计算机体系结构的影响,用于在网络上传输数据。大多数网络协议要求各种数据结构在网络传输时都必须使用网络字节顺序。

函数名称 “htons” 代表 “host to network short”,意思是将主机字节顺序转换为网络字节顺序的短整型。类似地,还有其他的字节顺序转换函数,例如 htonl() 用于将长整型转换为网络字节顺序,ntohs() 用于将网络字节顺序转换为主机字节顺序等。

需要注意的是,在处理网络通信数据时,确保正确使用适当的字节顺序转换函数,以保证数据在不同计算机上的正确解析和传输。

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

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

相关文章

P3372 【模板】线段树 1(内附封面)

【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。 …

数据库管理员知识图谱

初入职场的程序猿,需要为自己做好职业规划,在职场的赛道上,需要保持学习,并不断点亮自己的技能树。  成为一名DBA需要掌握什么技能呢,先让Chat-GPT为我们回答一下: 数据库管理系统 (DBMS)知识&#xff…

B079-项目实战--支付模块 定时任务 项目总结

目录 概述示例jar包配置类任务详情 项目应用封装的工具类QuartzUtils封装IQuartzSrvice和QuartzServiceImpl封装参数QuartzJobInfo编写任务逻辑MainJob调用第三方支付前添加定时任务异步回调后移除定时任务 订单支付整体流程 概述 优势:Tmer不支持持久化&#xff0…

Java的JDBC编程

目录 一、概念 二、Java代码操作MySQL 1、创建一个项目 2、引入MySQL的驱动包,作为项目的依赖 3、把 jar包 导入到项目中 4、创建一个数据源 5、建立网络上的连接 6、构造SQL语句 7、执行 sql 语句 8、释放必要的资源.关闭连接 一、概念 JDBC ,即…

【Jquery大事件时间线】jquery实现大事件时间线(时间轴)的滚动切换效果『附完整源码』

文章目录 写在前面涉及知识点页面效果1、搭建框架1.1 模块搭建1.2 内容填充1.3 时间线的切换 2、完整代码2.1 html源码2.2 CSS源码2.3 js源码 3、完整源码包下载3.1百度网盘3.2 123云盘3.3邮箱留言 总结 写在前面 其实这种大事件记录的web页面也是我们常见的,尤其是…

Go语言性能优化建议与pprof性能调优详解——结合博客项目实战

文章目录 性能优化建议Benchmark的使用slice优化预分配内存大内存未释放 map优化字符串处理优化结构体优化atomic包小结 pprof性能调优采集性能数据服务型应用go tool pprof命令项目调优分析修改main.go安装go-wrk命令行交互界面图形化火焰图 性能优化建议 简介: …

使用redis-cli操作redis

redis-cli是原生redis自带的命令行工具,可以帮助我们通过简单的命令连接redis服务,并进行数据管理,即redis键(key)和redis数据结构的管理。 关于如何进入redis-cli命令行客户端,请查看文章:Redi…

CMake:为Eigen库使能向量化

CMake:为Eigen库使能向量化 导言构建Eigen项目结构CMakeLists.txt相关源码 导言 本篇开始将涉及检测外部库相关的内容,期间会穿插着一些其他的内容。为了能够使得系统在系统中运行Eigen库,我们首先需要在系统中配置好Eigen库。然后介绍与Eigen库相关的C…

Spring事件监听器ApplicationListener

目录 介绍 spirng启动后启动某方法 介绍 ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需…

【Android】APP启动优化学习笔记

启动优化目的 用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动…

132个心理性格趣味测试ACCESS\EXCEL数据库

今天又遇到了一个心理测试的数据库,这个数据库在表结构的设置上很直观,属于那种好的数据库结构,共分三个表,一个是测试项目描述表、一个是测试题选项得分表、一个是根据得分区间解析表,表与表之间通过“question_id”字…

【Python】pyqt6入门到入土系列,非常详细...

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、什么是PyQt6? 简单介绍一下PyQt6 1、基础简介 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。 PyQt6的官网:www.riverbankcomputing.co.uk/news。 PyQt6是由Riverbank Co…

行为型模式之中介者模式

中介者模式(Mediator Pattern) 中介者模式是一种行为型设计模式,旨在通过封装一系列对象之间的交互方式,使其能够独立地进行通信。 中介者模式的核心思想是将对象之间的直接通信改为通过一个中介者对象来进行间接通信,…

套接字通信的客户端和服务端的实现

知识了解: 1.IP:本质是一个整型数,用于表示计算机在网络中的地址。IP协议版本有两个:IPv4和IPv6 IPv4(Internet Protocol version4): 使用一个32位的整型数描述一个IP地址,4个字节,int型也可以…

MTK system_server 卡死导致手机重启案例分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、MTK AEE Log分析工具二、AEE Log分析流程三、system_server 卡死案例分析及解决 本文主要针对 Exception Type: system_server_watchdog , system_…

[运维]python 启用http 文件服务

要在Python中启用HTTP文件服务,您可以使用内置的http.server模块(在Python 3中)或SimpleHTTPServer模块(在Python 2中)。 在Python 3中: python -m http.server在Python 2中: python -m Simp…

力扣SQL之路:窗口函数应用

文章目录 1.引言2.力扣SQL题目3. 解题策略4.代码实现5.总结 1.引言 窗口函数是 SQL 中一种强大的分析函数,它可以在结果集中创建一个窗口,并对窗口内的数据进行计算和分析。在力扣(LeetCode)的 SQL 题目中,窗口函数经…

Linux进程概念(一)

文章目录 Linux进程概念查看进程杀死进程进程标识符 手动创建进程的方式fork函数创建进程 进程状态运行态阻塞态和挂起 Linux进程概念 前文我们了解了,进程的基本概念,在课本上被描述为,正在执行的程序,在linux内核上&#xff0c…

代码随想录算法训练营day50

文章目录 Day50买卖股票的最佳时机III题目思路代码 买卖股票的最佳时机IV题目思路代码 Day50 买卖股票的最佳时机III 123. 买卖股票的最佳时机 III - 力扣(LeetCode) 题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。…

P5724 【深基4.习5】求极差 / 最大跨度值

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​,求这 n n n 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。 输入格式 第一行输入一个正整数 n n n,表示整数个数。 第二行输入 n n n 个整数 a 1 , a 2 … a n a_1,…