网络编程套接字详解

目录

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.rhkb.cn/news/326281.html

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

相关文章

Redis详解(二)

事务 什么是事务? 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都…

JVM内存结构

文章目录 JVM的内存结构程序计数器虚拟机栈(栈)本地方法栈Native关键字 堆元空间(JDK1.8之前为永久代) 实例对象实例化的过程 JVM的内存结构 先看下图 内存结构分为以下的两种:线程私有以及线程共享 线程私有&#x…

1070: 邻接矩阵存储简单路径

解法&#xff1a; #include<iostream> #include<vector> using namespace std; int arr[100][100]; int n; int sta, des; vector<int> path; vector<vector<int>> res; void dfs(vector<int> &a,int i) {a[i] 1;path.push_back(i);…

【数据分析面试】42.用户流失预测模型搭建(资料数据分享)

题目 保持高的客户留存率可以稳定和提到企业的收入。因此&#xff0c;预测和防止客户流失是在业务中常见的一项数据分析任务。这次分享的数据集包括了电信行业、银行、人力资源和电商行业&#xff0c;涵盖了不同业务背景下的流失预测数据。 后台回复暗号&#xff08;在本文末…

【Ubuntu永久授权串口设备读取权限“/dev/ttyUSB0”】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限&#xff0c;拥有者是root&#xff0c;所属用户组为dialout2.2 查看dialout用户组成员&#xff0c;如图所示&#xff0c;普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

Python 求高斯误差函数 erf 和 erfc

文章目录 Part.I IntroductionPart.II 概念定义Chap.I 误差函数 erfChap.II 误差函数补 erfc Part.II 求值与绘图Chap.I 求取方式Chap.II 绘图 Reference Part.I Introduction 本文将对误差函数&#xff08;ERror Function, ERF&#xff09;进行简单的介绍&#xff0c;并探索如…

Linux网站服务

1.概念:HTML:超级文本编辑语言 网页:使用HTML,PHP,JAVA语言格式书写的文件。 主页:网页中呈现用户的第一个界面。 网站:多个网页组合而成的一台网站服务器。 URL:统一资源定位符&#xff0c;访问网站的地址。 网站架构:LAMP: LinuxApacheMYSQLPHP(系统服务器程序数据管理…

Multitouch for Mac:手势自定义,提升工作效率

Multitouch for Mac作为一款触控板手势增强软件&#xff0c;其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch&#xff0c;用户可以轻松设置各种手势&#xff0c;如三指轻点、四指左右滑动等&#xff0c;来执行常见的任务&#xff0c;如打开应用、切换窗口、滚…

爬虫工作量由小到大的思维转变---<第七十三章 > Scrapy爬虫详解一下HTTPERROE的问题

前言&#xff1a; 在我们的日常工作中&#xff0c;有时会忽略一些工具或组件的重要性&#xff0c;直到它们引起一连串的问题&#xff0c;我们才意识到它们的价值。正如在Scrapy框架中的HttpErrorMiddleware&#xff08;HTTP错误中间件&#xff09;一样&#xff0c;在开始时&…

MATLAB R2017b安装的关键一步

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 MATLAB R2017b的安装文件比较庞大&#xff0c;由两个iso文件组成&#xff1a;R2017b_win64_dvd1.iso和R2017b_win64_dvd2.iso。安装时需要注意的是&#xff0c;首先使用DAEMON Tools Lite打开R2017b_win64_dvd1.iso&am…

【Git】Git在Gitee上的基本操作指南

文章目录 1. 查看 git 版本2. 从Gitee克隆仓库&#xff1a;3. 复制文件到工作目录&#xff1a;4. 将未跟踪的文件添加到暂存区&#xff1a;5. 在本地提交更改&#xff1a;6. 将更改推送到远程仓库&#xff08;Gitee&#xff09;&#xff1a;7. Windows特定提示&#xff1a; 1. …

品鉴中的品鉴笔记:如何记录和分享自己的品鉴心得

品鉴云仓酒庄雷盛红酒的过程&#xff0c;不仅是品尝美酒&#xff0c;更是一次与葡萄酒深度对话的旅程。为了更好地记录和分享自己的品鉴心得&#xff0c;养成写品鉴笔记的习惯是十分必要的。 首先&#xff0c;选择一个适合的记录工具。可以是传统的笔记本&#xff0c;也可以是…

使用Git管理github的代码库-上

1、下载安装Git https://download.csdn.net/download/notfindjob/11451730?spm1001.2014.3001.5503 2、注册一个github的账号&#xff08;已经注册的&#xff0c;可略过这一步&#xff09; 3、打开git命令行&#xff0c;配置github账号 git config --global user.name &quo…

【C语言】指针(一)

目录 一、内存 1.1 ❥ 理解内存和地址的关系 1.2 ❥ 编址 二、指针变量 2.1 ❥ 取地址操作符&#xff08;&&#xff09; 2.2 ❥ 指针变量和解引用操作符&#xff08;*&#xff09; 2.3 ❥ 指针变量的大小 三、指针类型的意义 3.1 ❥ 指针的解引用 3.2 ❥ 指针-整数 3…

攻防世界PHP2

1、打开靶机链接http://61.147.171.105:49513/&#xff0c;没有发现任何线索 2、尝试访问http://61.147.171.105:49513/index.php&#xff0c;页面没有发生跳转 3、尝试将访问 尝试访问http://61.147.171.105:49513/index.phps index.php 和 index.phps 文件之间的主要区别在于…

websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架

文章目录 epollselect和poll的优缺点epoll的原理以及优势epoll 好的网络服务器设计Reactor模型图解Reactor muduo库的Multiple Reactors模型 epoll select和poll的优缺点 1、单个进程能够监视的文件描述符的数量存在最大限制&#xff0c;通常是1024&#xff0c;当然可以更改数…

[机器学习-06] | Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Linux 第二十九章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

FPGA第2篇,FPGA与CPU GPU APU DSP NPU TPU 之间的关系与区别

简介&#xff1a;首先&#xff0c;FPGA与CPU GPU APU NPU TPU DSP这些不同类型的处理器&#xff0c;可以被统称为"处理器"或者"加速器"。它们在计算机硬件系统中承担着核心的计算和处理任务&#xff0c;可以说是系统的"大脑"和"加速引擎&qu…

四款不同类型的企业防泄密软件推荐

在数字化快速发展的今天&#xff0c;企业数据的安全与保密显得愈发重要。防泄密软件作为一种专门的数据保护工具&#xff0c;已经逐渐成为企业不可或缺的安全屏障。本文将深入探讨防泄密软件对企业的意义&#xff0c;并介绍一些市面上主流的防泄密软件。 首先&#xff0c;防泄密…