网络编程套接字详解

目录

1. 预备介绍

2.网络字节序

3.udp网络程序

4.地址转换函数

5.udp网络编程


1.预备介绍

1.1源IP地址和目标IP地址

举个例子:

      从北京出发到上海旅游, 那么源IP地址就是北京, 目标IP地址就是上海.

 1.2 端口号

 作用: 标识一个进程, 告诉OS这个数据交给那个进程来处理;

(1) 端口号是2字节16位数据;

(2) 端口号+IP地址就可以标识特定的某一台主机和某一个进程来处理;

(3) 一个端口号只能标识一个进程;

小tips:

端口号和进程ID有什么联系?

一个进程可以有多个端口号, 但是一个端口号只能标识一个进程.

源端口号和目标端口号

源端口号是指发送数据的应用程序在本地计算机上使用的端口号,而目的端口号是指接收数据的应用程序在远程计算机上使用的端口号。

举个栗子: 送快递的这个快递是谁发的,就是源端口号, 发送给谁就是目标端口号.

 1.3 TCP协议和udp协议特点

TCP特点: 传输层协议 有连接 可靠传输 面向字节流

UDP特点: 传输层协议 无连接 不可靠传输 面向数据报

 2.网路字节序

网络数据流和内存地址一样也是分大小端的, 网络字节序就是用来定义网络数据流的地址.

(1)发送端主机通常将缓冲区的数据由低到高的顺序发出;

(2)接受端主机也将数据由低到高的顺序进行保存到缓冲区;

(3)所以先发出的数据是低地址, 后发出的是高地址.

(4)无论主机是大端还是小端机, 都是按照TCP/IP协议大端字节序(低位是高地址);


2.1 认识一些接口用于主机字节序和网络字节序的交换:

(1)socket: 创建一个套接字.(文件描述符)

参数1.domain:地址族; 就是IP地址类型, 常用有AF_INET和AF_INET6.

2.type:套接字的类型, 有SOCK_STREAM(流式套接字) 和 SOCK_DGRAM(数据报套接字);

3.protocol: 传输协议;

(2) bind: 绑定端口号.

(3) listen: 监听端口号;

(4)accept接受请求:

(5) connect建立连接:

sockaddr结构体:网络编程接口

sockaddr:保存多种类型的IP的地址和端口号.

sockaddr_in: 用来专门保存IPv4的地址

3.udp网络程序

这里专门后面写一篇博客详细讲解! 大家可以蹲一波.谢谢!

4.地址转换函数

sockaddr结构体里面的一个字段:

sin_addr: 是表示32位的IP地址, 我们通常的读取地址字符串的点分十进制;

字符串转in_addr的函数:

htonl和htons是用来主机序转为网络序;

ntohl和ntohs是用来网络序转为主机序;

in_addr转字符串的函数:

inet_ntoa函数: 将返回结果放到了静态区, 第二次调用会覆盖之前的数据, 可能造成线程不安全的问题, 最好使用inet_ntop, 将数据存放在缓存区.

 5.TCP网络编程

这个和udp编程放到一篇博客里面具体来讲.

 6.sock API

(1) sock:打开网络通讯接口;成功就会返回一个文件描述符;

错误就会返回-1;

int sock(int domain, int type, int protocol)

(2) bind: 用来绑定特定的IP地址和端口号用来向服务器发起连接;

成功返回0, 失败返回-1.

将sockfd和addr进行绑定, 用于网络监听文件描述符;

Add:

对于addr需要自己进行手动修改, bzero进行清零; 设置sin_family , sin_addr.s_addr ,

sin_port.

int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen)

(3) listen: 网络监听

backlog是运行客户端等待连接的个数;

listen()成功返回0,失败返回-1;

int listen(int sockfd, int backlog)

(4) accept:

三次握手成功之后, 调用accept接受连接;

如果还没有客户端连接的请求就会阻塞等待直到客户端连接;

addr参数是用来传出客户端的IP和端口号; 如果为NULL就是不关系客户端的地址;

addrlen参数就是用来缓冲区的长度避免溢出, 传出的是sockaddr的实际长度.

int accept(int sockfd, const struct sockaddr* addr, struct socklen_t* addrlen)

(5) connect:连接服务器;  

与bind的区别: connect连接的是别人的地址, bind的是自己的地址.

成功返回0, 失败返回-1.

int connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen)

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

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

相关文章

Oracle: 一个用户多个表空间处理

1.场景描述 今天工作中,同事说建了一个用户,往里面导入数据时提示表空间不存在,建了表空间后,部分仍然导不进去。期望帮忙创建表空间,并指定默认表空间,成功将数据导入。 (1)创建好的…

K8s:二进制安装k8s(单台master)

目录 一、安装k8s 1、拓扑图 2、系统初始化配置 2.1关闭防火墙selinx以及swap 2.2设置主机名 2.3在每台主机中添加hosts,做映射 2.4调整内核参数,将桥接的ipv4流量传递到iptables,关闭ipv6 2.4时间同步 3、部署docker引擎&#xff0…

使用LangChain和Neo4j快速创建RAG应用

大家好,Neo4j 通过集成原生的向量搜索功能,增强了其对检索增强生成(RAG)应用的支持,这标志着一个重要的里程碑。这项新功能通过向量索引搜索处理非结构化文本,增强了 Neo4j 在存储和分析结构化数据方面的现…

表征和基于结构的蛋白质工程:黄芪特异性皂苷乙酰转移酶-文献精读14

Characterization and structure-based protein engineering of a regiospecific saponin acetyltransferase from Astragalus membranaceus 表征和基于结构的蛋白质工程:黄芪特异性皂苷乙酰转移酶,一篇乙酰基转移酶文章精读分享~ 摘要 乙酰化有助于许…

【C++】继承相关(基类与派生类的继承关系以及细节整理)

目录 00.引言 01.继承的定义 02.基类和派生类对象 03.继承中的作用域 04.派生类的默认成员函数 05.友元、静态成员 00.引言 继承是面向对象编程中的一个重要概念,它的作用是创建一个新的类,该类可以从一个已存在的类(父类/基类&#x…

服务攻防——数据库安全

第一步: 端口扫描:nmap 扫不到端口:端口被修改,防护软件,放在内网环境 mysql 内置端口3306 第一种官方漏洞 第一步:先扫描有什么端口开发 用这个错误密码一直访问,最终就进去了 弱口令猜解 不可以直接猜解&#x…

机器人学导论实验1—CoppeliaSim 平台介绍及初步使用BJTU

1. 实验内容分析 对实验内容的理解及关键点: 理解这个实验的关键点在于理解如何使用CoppeliaSim和MATLAB来控制和操作机器人。需要熟悉这两个工具的基本操作,例如如何加载场景、如何修改机器人参数、如何使用MATLAB客户端程序来控制机器人等。此外&#…

Docker 部署 Prometheus 实现一个极简的 QPS 监控

背景 : Prometheus 是近年来最流行的开源监控框架, 其功能强大且易于使用, 拥有各种主流后端语言(Java/Go/Python/Node.js等)与各种场景(如web handler/ k8s/Nginx/MySQL等)的客户端, 并自带图形化显示页面。分享一个快速入门Prometheus 的教程, 实现一个极简的, 后端开发需要特…

Nginx-基础-基础配置-Location

Location 参数匹配模式 参数匹配方式匹配模式说明注意事项精准匹配普通字符串匹配用于标准uri前,要求请求字符串与uri精准匹配,成功则立即处理,nginx停止搜索其他匹配。~正则匹配正则表达式匹配用于正则uri,表示uri包含正则表达…

基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xff0…

Docker安装达梦数据库

1.确保已安装Docker 可参考:Linux安装Docker-CSDN博客 2.上传dm镜像并导入安装包 可以从:产品下载 | 达梦数据库下载dm镜像,如下图: docker load -i dm8_20230808.tar 3.导入后查看镜像 docker images 4.启动容器 docker run …

图的概念、性质和存储与简单遍历

前置知识:树的基本概念及性质 为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!如果在阅读中遇到困难,也可以回到前面章节查阅。 学习目标 掌握图的基本概念掌握图的一些性质 图的概念 基本概念 图 (…

Pytorch如何计算网络参数

方法一. 利用pytorch自身 PyTorch是一个流行的深度学习框架,它允许研究人员和开发者快速构建和训练神经网络。计算一个PyTorch网络的参数量通常涉及两个步骤:确定网络中每个层的参数数量,并将它们加起来得到总数。 以下是在PyTorch中计算网…

如何在 CloudFlare 里屏蔽/拦截某个 IP 或者 IP 地址段

最近除了接的 CloudFlare 代配置订单基本很少折腾自己的 CloudFlare 配置了,今天给大家简单的讲解一下如何在 CloudFlare 里屏蔽/拦截 IP 地址和 IP 地址段,虽然明月一直都很反感针对 IP 的屏蔽拦截,但不得不说有时候还是很有必要的。并且,既然可以拦截屏蔽 IP 自然也可以但…

鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础

基本概念 | 官方定义 VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,为用户提供统一的类Unix文件操作接口。由于不同类型的文件系统接口不统一&#x…

Flink HA模式下JobManager切换时发送告警

资源&版本信息 Flink版本1.14.6 运行平台:K8s HA使用ZK(使用K8s的ETC应该是一个道理) 详解Flink HA原理 Flink启动时会创建HighAvailabilityServices提供HA和相关基础服务,其中包括leaderRetrievalService和LeaderElecti…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…

宁夏银川市起名专家的老师颜廷利:死神(死亡)并不可怕,可怕的是...

在中国优秀传统文化之中,汉语‘巳’字与‘四’同音,在阿拉伯数字里面,通常用‘4’来表示; 湖南长沙、四川成都、重庆、宁夏银川最靠谱最厉害的起名大师的老师颜廷利教授指出,作为汉语‘九’字,倘若是换一个…

[ACTF新生赛2020]SoulLike

没见过的错误: ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE64 改为 MAX_FUNCSIZE1024 然后就是一堆数据 反正就是12个字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

94.二叉树的中序遍历

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…