Linux socket网络编程

一、主机字节序列和网络字节序列

主机字节序列分为大端字节序列和小端字节序列,不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存的高地址处,低位字节存储在内存的低地址处。在两台使用不同字节序列的主机之间传递数据时,可能会出现冲突。所以,在将数据发送到网络时规定整型数据使用大端字节序列,所以也把大端字节序列称为网络字节序列。对方接收到数据后,可以根据自己的字节序列转换。

Linux系统提供如下4个函数来完成主机字节序列和网络字节序列的转换:

在这里插入图片描述

二、套接字的地址结构

1.通用socket地址结构

socket网络编程接口中表示socket地址的是结构体sockaddr,定义如下:

#include<bits/socket.h>struct sockaddr
{sa_famliy_t sa_family;char sa_data[14];
}

sa_family成员是地址族(sa_famliy_t)类型的变量。地址族类型通常与协议族类型对应。常见的协议族和对应的地址族如下图所示:

在这里插入图片描述

2.专用socket地址结构

TCP/IP协议族有sockaddr_in和sockaddr_in6两个专用的socket地址结构,它们分别用于IPV4和IPV6,一般使用sockaddr_in:

结构体sockaddr_in它用来处理网络通信的地址,是internet环境下套接字的地址形式。
所以在网络编程中我们会对sockaddr_in结构体进行操作,使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。sockaddr_in用于socket定义和赋值。

struct sockaddr_in
{sa_family_t sin_family;//地址族  AF_INET  u_int16_t sin_port;//端口号,需要用网络字节序表示struct in_addr sin_addr;//IPV4地址结构体
}

该结构体中提到的另一个结构体 in_addr 的定义如下:

struct in_sddr
{u_int32_t s_addr;//以网络字节序列表示IPV4地址
}

它用来表示一个32位的IPv4地址。
in_addr_t 一般为 32位的unsigned int,其字节顺序为网络顺序,即该无符号整数采用大端字节序 。

3.IP地址转换函数

通常,人们习惯用点分十进制字符串表示IPV4地址,但编程中我们需要先把它们转化为整数方能使用,下面函数可用于点分十进制字符串表示的IPV4地址和网络字节序整数表示的IPV4地址之间的转换:

在这里插入图片描述

三、网络编程接口

1.socket()创建套接字

在这里插入图片描述

参数解释:

第一个参数domain:设置套接字的协议簇, AF_UNIX AF_INET AF_INET6。
第二个参数type:设置套接字的服务类型,SOCK_STREAM(流式套接字)、SOCK_DGRAM(数据报格式套接字)。
第三个参数protocol:一般设置为0,表示使用默认协议
返回值:创建成功返回套接字的文件描述符,失败返回-1 。

2.bind()服务端把用于通信的地址和端口绑定到 socket 上在这里插入图片描述

参数解释:

第一个参数sockfd:套接字文件描述符,即代表socket函数创建的套接字文件。
第二个参数addr:指向一个struct sockaddr类型的结构体变量,此结构体成员用于设置要绑定的ip和端口。
struct sockaddr结构体如下:

struct sockaddr {sa_family_t sa_family;//指定协议族char        sa_data[14];//字符数组,存放ip和端口}

由于一般在定义套接字地址的时候用的是struct sockaddr_in类型的结构体变量,所以在这个参数中要把struct sockaddr_in类型的结构体变量强转为struct sockaddr类型的结构体变量。原因是:struct sockaddr_in结构体的成员中设置ip和端口的变量是分开的,所以在定义的时候设置方便,但是bind函数要求的是struct sockaddr类型的结构体变量,所以使用struct sockaddr_in设置套接字地址以后要将其强制转化为struct sockaddr类型,然后通过这个参数传值给bind函数。

第三个参数addrlen:第二个参数所指向的结构体变量的大小,即socket地址的长度。
返回值:成功返回0,失败返回-1。

3.listen()创建一个监听队列以存储待处理的客户连接

在这里插入图片描述

参数解释:

第一个参数sockfd:被监听的socket套接字。
第二个参数backlog:表示处于完全连接状态的socket的上限。
返回值:成功返回0,失败返回-1。

4.accept()从listen监听队列中接收一个连接

在这里插入图片描述

参数解释:

第一个参数sockfd:是执行过listen系统调用的监听socket 。
第二个参数addr:参数用来获取被接受连接的远端socket地址。
第三个参数addrlen:指定该socket地址的长度。
返回值:成功返回一个新的连接socket,该socket唯一地标识了被接收的这个连接,失败返回-1 。

5.connect()客户端需要通过此系统调用来主动与服务器建立连接

在这里插入图片描述

参数解释:

第一个参数sockfd:由socket()返回的一个socket。
第二个参数serv_addr:服务器监听的socket地址。
第三个参数addrlen:指定这个地址的长度。
返回值:成功返回0,失败返回-1。

6.recv()读取sockfd上的数据(TCP读取数据)在这里插入图片描述

参数解释:

第一个参数sockfd:已连接stocket的描述符。
第二个参数buff:指定读缓冲区的位置。
第三个参数len:指定读缓冲区的大小。
第四个参数flags:为数据收发提供了额外的控制。

7.send()往socket上写入数据(TCP写入数据)

在这里插入图片描述
参数解释:

第一个参数sockfd:已连接stocket的描述符。
第二个参数buff:指定读缓冲区的位置。
第三个参数len:指定读缓冲区的数据长度。
第四个参数flags:为数据收发提供了额外的控制。

8.close()关闭一个连接

在这里插入图片描述

参数解释:

参数sockfd:关闭该连接对应的socket。

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

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

相关文章

【Windows 常用工具系列 10 -- linux ssh登录脚本输入密码】

文章目录 脚本输入SSH登录密码scp 脚本免密传输 脚本输入SSH登录密码 sshpass 是一个用于运行时非交互式ssh密码提供的工具&#xff0c;它允许你直接在命令行中为ssh命令提供密码。这就意味着你可以在脚本中使用ssh命令&#xff0c;而不需要用户交互地输入密码。 一般来说&am…

技术分享| WebRTC之SDP详解

一&#xff0c;什么是SDP WebRTC 是 Web Real-Time Communication&#xff0c;即网页实时通信的缩写&#xff0c;是 RTC 协议的一种Web实现&#xff0c;项目由 Google 开源&#xff0c;并和 IETF 和 W3C 制定了行业标准。 WebRTC是点对点通讯&#xff0c;他的通话建立需要交换…

【数据结构练习】链表面试题锦集一

目录 前言&#xff1a; 1. 删除链表中所有值为key的节点 方法一&#xff1a;正常删除&#xff0c;头结点另外讨论 方法二:虚拟头结点法 方法三&#xff1a;递归 2.反转链表 方法一&#xff1a;双指针迭代 方法二&#xff1a;递归法解析&#xff1a; 3.链表的中间结点 方法…

AWVS安装~Windows~激活

目录 1.下载安装包 2.双击acunetix_15.1.221109177.exe进行安装 3.配置C:\Windows\System32\drivers\etc\hosts 4.复制wvsc.exe到C:\Program Files (x86)\Acunetix\15.1.221109177下 5.复制license_info.json与wa_data.dat到C:\ProgramData\Acunetix\shared\license下&…

CentOS中Oracle11g进程有哪些

最近遇到Oracle数据库运行过程实例进程由于某种原因导致中止的问题&#xff0c;专门看了下正常Oracle数据库启动后的进程有哪些&#xff0c;查阅资料了解了下各进程的作用&#xff0c;记录如下。 oracle 3032 1 0 07:36 ? 00:00:00 ora_pmon_orcl oracle …

解决 node-gyp 错误问题

gyp verb check python checking for Python executable “python2.7” in the PATH gyp verb which failed Error: not found: python2.7 安装老项目老是报错Python找不到&#xff0c;以为是自己node版本高过了node-sass导致的&#xff0c;把node版本降下来还是不行。然后找到…

ONLYOFFICE协作空间服务器如何一键安装自托管私有化部署

ONLYOFFICE协作空间服务器如何一键安装自托管私有化部署 如何在 Ubuntu 上部署 ONLYOFFICE 协作空间社区版&#xff1f;https://blog.csdn.net/m0_68274698/article/details/132069372?ops_request_misc&request_id&biz_id102&utm_termonlyoffice%20%E5%8D%8F%E4…

vue3+element下拉多选框组件

<!-- 下拉多选 --> <template><div class"select-checked"><el-select v-model"selected" :class"{ all: optionsAll, hidden: selectedOptions.data.length < 2 }" multipleplaceholder"请选择" :popper-app…

ui设计师简历自我评价(合集)

UI设计最新面试题及答案 1、说说你是怎么理解UI的? UI是最直观的把产品展示展现在用户面前的东西&#xff0c;是一个产品的脸面。人开始往往是先会先喜欢上美好的事物后&#xff0c;在去深究内在的东西的。 那么也就意味着一个产品的UI首先要做的好看&#xff0c;无论风格是…

智慧班牌云平台源码 (人脸识别、信息发布、校园风采、家校互通、教务管理、考勤管理)

电子班牌是一款智慧校园的管理工具&#xff0c;也是校园的多媒体展示平台&#xff0c;智慧电子班牌系统是专为学校智慧教育设计的一款智慧校园的管理工具&#xff0c;融合了多媒体信息发布、校园风采、家校互通、教务管理、考勤管理、日常办公等一系列应用。具备智慧教育功能和…

自定义VIEW之SeekBar

先放效果 实现代码 import android.annotation.SuppressLint import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Rect import android.util.AttributeSet import android…

H3C 无线网络vlan pool架构案例三层组网web配置

实验的是目标就是要实现华为vlan pool那种应用&#xff0c; 整个园区发一种ssid信号&#xff0c;但是连接的客户端可以随机连上后进入不同的vlan&#xff0c;在这大型园区网非常有用。 这种方法也适合同一个ssid情况下&#xff0c;在不同的位置关联不同的vlan 开启自动固化、…

会议剪影|思腾合力受邀参加2023中国算力大会并作主题演讲

共享数字经济合作新机遇&#xff0c;携手开创算力产业新未来。8月18日-19日&#xff0c;由工业和信息化部、宁夏回族自治区人民政府主办的2023中国算力大会、第二届“西部数谷”算力产业大会在银川盛大启幕。思腾云计算总经理庞志刚、思腾合力市场总监徐莉受邀参会。 ▲思腾云计…

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …

学习平台助力职场发展与提升

近年来&#xff0c;随着互联网技术的发展&#xff0c;学习平台逐渐成为了职场发展和提升的必备工具。学习平台通过提供丰富的课程内容、灵活的学习时间和个性化的学习路径&#xff0c;帮助职场人士更好地提升自己的技能和知识储备&#xff0c;为职场发展打下坚实的基础。 学习…

UML 类图

1、概述 目录 1、概述 1.1、UML概念 1.2、类图的概念 2、类的表示方式 2.1、普通类 2.2、抽象类 2.3、接口 3、类与类关系的表示 3.1、关联关系&#xff08;Association&#xff09; 3.1.1、单向关联 3.1.2、双向关联 3.1.3、自关联 3.2、聚合关系&#xff08;aggre…

ElasticSearch简介、安装、使用

一、什么是ElasticSearch&#xff1f; Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。 Kibana 使您能够以交互方式探索、可视化和分享对数据的见解&#xff0c;并管理和监…

【python利用shp文件进行绘图白化】

python白化 白化的作用python实现 白化的作用 参考博文【matlab利用shp文件制作mask白化文件】 python实现 python借助shp文件对绘图进行白化&#xff0c;不需要进行mask文件的制作&#xff0c;可以高效地进行区域绘制 import numpy as np import cartopy.crs as ccrs impo…

【SpringSecurity】二、密码处理与获取当前登录用户

文章目录 一、密码处理1、加密方案2、BCryptPasswordEncoder类初体验3、使用加密码加密 二、获取当前登录用户1、方式一&#xff1a;通过安全上下文的静态调用2、方式二&#xff1a;做为Controller中方法的参数3、方式三&#xff1a;从HTTPServletRequest中获取4、方式四&#…

vim 常见操作

Vim 工作模式 1、vim 三种基本的工作模式 vim有三种基本的工作模式&#xff0c;分别为&#xff1a;命令模式、末行模式、编辑模式。关于这三种工作模式的介绍&#xff0c;请见下文。 1.1、命令模式 使用vim打开文件之后&#xff0c;首先进入命令模式&#xff0c;它是vim编辑…