当前位置: 首页 > news >正文

网络编程套接字详解

目录

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)

相关文章:

网络编程套接字详解

目录 1. 预备介绍 2.网络字节序 3.udp网络程序 4.地址转换函数 5.udp网络编程 1.预备介绍 1.1源IP地址和目标IP地址 举个例子: 从北京出发到上海旅游, 那么源IP地址就是北京, 目标IP地址就是上海. 1.2 端口号 作用: 标识一个进程, 告诉OS这个数据交给那个进程来处理; (1)…...

蓝桥杯备战11.歌唱比赛

P5738 【深基7.例4】歌唱比赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N 2e710,M 1e310; int a[N],sum[N];signed main() {//std::ios::sync_with_stdio(0),cin.…...

微信小程序中的图像奥秘:图片与Base64的华丽变身记

微信小程序中的图像奥秘&#xff1a;图片与Base64的华丽变身记 基本概念解析图片与Base64的关系为何转换 图片转Base64实战微信小程序使用wx.getImageInfo获取图片信息图片转换为Base64注意 Base64转图片直接在小程序页面显示云开发环境转换注意 遇遇问题排查思路结语引发讨论 …...

【35分钟掌握金融风控策略25】定额策略实战2

目录 基于收入和负债的定额策略 确定托底额度和盖帽额度 确定基础额度 基于客户风险评级确定风险系数 计算最终授信额度 确定授信有效期 基于收入和负债的定额策略 在实际生产中&#xff0c;客户的收入和负债数据大多无法直接获得&#xff0c;对于个人的收入和负债数据&…...

我和爬虫的故事

文章目录 爬虫简介个人经历未来总结 爬虫简介 网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外…...

常用的简单友好的工单系统(免费)- WGCAT

最近在项目中&#xff0c;有工单系统的需求场景&#xff0c;所以想寻找一款轻量简单的运维工单软件&#xff0c;主要用来记录和处理工作中的一些故障、维护&#xff0c;主要用来记录设备的维护状态&#xff0c;包括服务器、主机、交换机那些 WGCAT&#xff0c;是一款简单轻量的…...

使用Pycharm编写Python程序时对基本类结构中方法的重写的两种初步操作方式

使用Pycharm编写Python程序时对基本类结构中方法的重写的两种初步操作方式 Python和其他一些高级面向对象的编程语言中&#xff0c;子类可继承父类中的方法&#xff0c;而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法&#xff0c;而是想作一定的修改&…...

HTTP URL 详解

概述 URL 提供了一种定位因特网上任意资源的手段&#xff0c;大多数 URL 语法都由以下九个结构的通用格式组成&#xff1a; <scheme>://<user>:<password><host>:<port>/<path>;<params>?<query>#<frag> 方案&#…...

Python 原生爬虫

Python 描述代码 描述 爬网站的页面配合正则表达式设置定时任务 仅学习参考&#xff0c;切勿使用其他用途 代码 import re import schedule import timefrom urllib.request import urlopenclass Spider:def __init__(self):# 初始化代码...pass# self.start_schedule()# 需要…...

数据结构---经典链表OJ

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…...

HTML_CSS学习:CSS像素与颜色

一、像素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>像素</title> </head><style>.atguigu1{/*单位可以是cm&#xff0c;但不能是m,dm*/width: 1cm;height: 1cm;background-c…...

华为交换机配置导出备份python脚本

一、脚本编写思路 &#xff08;一&#xff09;针对设备型号 主要针对华为&#xff08;Huawei&#xff09;和华三&#xff08;H3C&#xff09;交换机设备的配置备份 &#xff08;二&#xff09;导出前预处理 1.在配置导出前&#xff0c;自动打开crt软件或者MobaXterm软件&am…...

DS:时间复杂度和空间复杂度

欢迎各位来到 Harper.Lee 的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 本片博客主要介绍的是数据结构中关于算法的时间复杂度和空间复杂度的概念。 一、算法 1.1 什么是算法&#xff1f; 算法(Alg…...

AI跟踪报道第41期-新加坡内哥谈技术-本周AI新闻:本周Al新闻: 准备好了吗?事情即将変得瘋狂

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Go 之 interface接口理解

go语言并没有面向对象的相关概念&#xff0c;go语言提到的接口和java、c等语言提到的接口不同&#xff0c;它不会显示的说明实现了接口&#xff0c;没有继承、子类、implements关键词。go语言通过隐性的方式实现了接口功能&#xff0c;相对比较灵活。 interface是go语言的一大…...

简约在线生成短网址系统源码 短链防红域名系统 带后台

简约在线生成短网址系统源码 短链防红域名系统 带后台 安装教程&#xff1a;访问 http://你的域名/install 进行安装 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/...

设置默认表空间和重命名

目录 设置默认表空间 创建的临时表空间 tspace4 修改为默认临时表空间 创建的永久性表空间 tspace3 修改为默认永久表空间 重命名表空间 将表空间 tspace3 修改为 tspace3_1 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/13520…...

Hive大表join大表如何调优

目录 一、调优思路1、SQL优化1.1 大小表join1.2 大大表join 2、insert into替换union all3、排序order by换位sort by4、并行执行5、数据倾斜优化6、小文件优化 二、实战2.1 场景2.2 限制所需的字段&#xff0c;间接mapjoin2.2 解决异常值倾斜&#xff0c;如NULL加随机数打散2.…...

SAF文件选择、谷歌PhotoPicker图片视频选择与真实路径转换

一、构建选择文件与回调方法 //文件选择回调ActivityResultLauncher<String[]> pickFile registerForActivityResult(new ActivityResultContracts.OpenDocument(), uri->{if (uri ! null) {Log.e("cxy", "返回的uri:" uri);Log.e("cxy&q…...

java可变参数

前言 我们虽然能够用重载实现&#xff0c;但多个参数无法弹性匹配 代码 class mycalculator{//下面的四个calculate方法构成了重载//计算2个数的和&#xff0c;3个数的和&#xff0c;4&#xff0c;5&#xff0c;6个数的和// public void calculate(int n1){// System.out.…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...