网络 通信

一、客户端接收(也可以bind)

1. socket

socket 函数 用于创建一个套接字(socket),这是网络通信的基础。

它的原型如下:int socket(int domain, int type, int protocol);

  • 参数

    • domain:指定协议族,如:
      • AF_INET:IPv4协议
      • AF_INET6:IPv6协议
    • type:指定通信类型,如:
      • SOCK_STREAM:面向连接的TCP协议
      • SOCK_DGRAM:无连接的UDP协议
    • protocol:一般设为0,表示使用默认协议。
  • 返回值:返回套接字的描述符,失败则返回-1。

2. recvfrom

recvfrom 函数用于接收数据报(UDP)的函数。它的原型如下:

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

  • 参数

    • sockfd:套接字描述符。
    • buf:指向接收数据的缓冲区。
    • len:缓冲区的长度。
    • flags:接收选项,一般设为0。
    • src_addr:指向 sockaddr 结构的指针,用于存储发送者的地址信息。
    • addrlen:指向变量的指针,表示 src_addr 的长度。
  • 返回值:成功时返回接收到的字节数,失败时返回-1。

3.sendto 

函数的原型通常如下所示:

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

参数说明:

  • sockfd: 套接字描述符,通常是通过 socket 函数创建的。
  • buf: 指向要发送的数据的指针。
  • len: 要发送的数据的字节数。
  • flags: 发送操作的标志,常用的有 0(无特殊标志)。
  • dest_addr: 目的地的地址信息,指向 struct sockaddr 结构体。
  • addrlen: 目的地地址结构的长度。
  • 返回值:
  • 成功时,返回发送的字节数;失败时,返回 -1,错误信息可以通过 errno 获取。

4. inet_addr

inet_addr 函数用于将IPv4地址的字符串表示形式(如 "192.168.1.1")转换为网络字节序的二进制形式。其原型如下:

in_addr_t inet_addr(const char *cp);

  • 参数cp 是指向包含点分十进制IP地址字符串的指针。
  • 返回值:返回一个 in_addr_t 类型的数值,表示网络字节序的IPv4地址。如果输入的IP地址格式不正确,则返回 INADDR_NONE

4. inet_ntoa

inet_ntoa 函数用于将网络字节序的二进制IP地址转换为点分十进制字符串表示形式。其原型如下:

char *inet_ntoa(struct in_addr addr);

  • 参数addr 是一个 struct in_addr 类型的结构,包含网络字节序的IPv4地址。
  • 返回值:返回一个指向字符串的指针,该字符串表示IPv4地址。该字符串为静态分配,后续调用可能会覆盖该字符串。

5. ntohs

ntohs 函数用于将网络字节序转换为主机字节序的无符号短整型(一般用于端口号)。其原型如下:

uint16_t ntohs(uint16_t netshort);

  • 参数netshort 是网络字节序的无符号短整型值。
  • 返回值:返回一个主机字节序的无符号短整型值。

6.htons

函数原型:   uint16_t htons(uint16_t hostshort);

参数

  • hostshort: 需要转换的 16 位无符号整数,通常代表端口号或其他短整型值。

返回值

htons 返回转换后的 16 位无符号整数,以网络字节序表示。

网络字节序 vs主机字节序

  • 网络字节序:通常是大端字节序(big-endian),即高位字节存储在低地址。
  • 主机字节序:根据具体的硬件架构,可以是大端或小端(little-endian)。例如,大多数 x86 架构使用小端字节序。

二、服务器端

1.socket

2.bind

bind 函数用于将一个套接字(socket)与一个本地地址(包括IP地址和端口号)关联起来。它通常用于服务器套接字,以便在特定地址上监听传入的连接请求。bind 的原型如下:

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

参数:
  • sockfd:一个套接字的描述符,通常是通过调用 socket 函数创建的。
  • addr:指向一个 sockaddr 结构体的指针,其中包含接口的地址和端口号。通常需要将其转换为适当的地址结构,例如 sockaddr_in(用于IPv4)。
  • addrlenaddr 的长度,通常可以使用 sizeof 来获取。
返回值:
  • 成功时返回0。
  • 失败时返回-1,并且可以通过 errno 获取具体的错误信息。

三、基于tcp的网络通信;(read,write)

1.tcp服务器

(1)建立连接

   socket

    bind

    listen

listen 函数用于将一个已绑定的套接字设为监听状态,以便接收传入的连接请求。只有在调用 bind 后,才能调用 listen。其原型如下:

int listen(int sockfd, int backlog);

参数:
  • sockfd:一个套接字的描述符,它已经通过 socket 和 bind 函数创建和绑定。
  • backlog:表示等待连接排队的最大数量。如果连接请求超过此数量,额外的请求会被拒绝或被重置。
返回值:
  • 成功时返回0。
  • 失败时返回-1,并且可以通过 errno 获取具体的错误信息

    accept

accept 函数用于接受传入的连接请求。成功后,它会返回一个新的套接字文件描述符,用于与连接的客户端进行通信。其原型如下:

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

参数:
  • sockfd:一个处于监听状态的套接字描述符,由 listen 返回。
  • addr:指向一个 sockaddr 结构的指针,用于存储客户端的地址信息。
  • addrlen:指向一个 socklen_t 类型的变量的指针,表示 addr 的大小,接受后会被更新为实际的地址长度。
返回值:
  • 成功时返回一个新的套接字文件描述符,用于与客户端通信。
  • 失败时返回-1,并且可以通过 errno 获取具体的错误信息。

2.tcp客户端

socket

connect

connect 函数用于客户端程序建立与服务器的连接。使用该函数时,客户端需要先创建一个套接字,并且必须知道服务器的地址和端口号。其原型如下:

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

参数:
  • sockfd:通过 socket 创建的套接字描述符,客户端使用此套接字进行连接。
  • addr:指向一个 sockaddr 结构的指针,包含服务器的地址(IP 地址和端口号)。
  • addrlenaddr 的大小,通常使用 sizeof(struct sockaddr_in) 来获得。
返回值:
  • 成功时返回0。
  • 失败时返回-1,并且可以通过 errno 获取具体的错误信息。

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

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

相关文章

虚幻5|AI视力系统,听力系统,预测系统(3)预测系统

虚幻5|AI视力系统,听力系统,预测系统(2)听力系统-CSDN博客 一,添加一个AI预感感官配置 1.选中我们的AIPerception,右侧细节添加一个AI预感感官配置,然后我们把所有感官的年龄都调成5,是所有 2…

全网最简单的Java设计模式【九】策略模式-实战中最常用的设计模式之一

策略模式是一种行为设计模式,它允许你定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。该模式让算法的变化独立于使用算法的客户。在实际开发中,策略模式可以帮助我们减少大量的 if-else 或 switch 条件判断语句&…

premiere2023暴力压缩视频

目录 1. 需求说明2. 压缩流程 1. 需求说明 要将三段视频拼接起来,时长超过了1h,然后压缩到200M以内的视频。 这是三段视频的信息: 合并三个视频文件意味着总时长增加了。较长的视频文件通常也会更大,即使比特率相同。 当我把三段…

vscode 阅读linux内核(vscode+clangd)

此插件曾在vim里用过,非常好用。 首先先在vscode 里下载clangd插件 这只是客户端,还需下载个服务器(这在coc插件里也有说明) sudo apt install clangd 下载完后可以 clangd --version 查看版本信息,如果能查看&#x…

UE5 日期时间蓝图变量 加减节点

参考链接:Having troubles with DateTime in UE5 - General / Feedback & Requests - Epic Developer Community Forums (unrealengine.com) 直接粘贴到UE5蓝图图表可用。(反之相加,用负号操作一下) 减号蓝图节点(…

8.22-docker的部署及其使用

docker 1.docker环境部署以及语法 [rootdocker ~]# cat << EOF | tee /etc/modules-load.d/k8s.conf> overlay> br_netfilter> EOFoverlaybr_netfilter[rootdocker ~]# modprobe overlay[rootdocker ~]# modprobe br_netfilter[rootdocker ~]# cat /etc/module…

AI绘画工具 Stable Diffusion【插画转绘】:建筑 | 风景| 人像照片的插画转绘制作教程,照片秒变插画风格图片!

大家好&#xff0c;我是画画的小强 关于Stable Diffusion 的插画转绘&#xff0c;今天给大家分享一种制作方法。我们先看一下效果图。 一. 图片转插画的制作方法 本期教程我们将使用AI绘画工具Stable Diffusion&#xff0c;关于SD的安装和入门使用可以看看我的往期入门教程…

122-域信息收集应用网络凭据CS插件AdfindBloodHound

参考&#xff1a;【内网安全】域信息收集&应用网络凭据&CS插件&Adfind&BloodHound_ladon adfinder bloodhound-CSDN博客 工作组和域环境 我的理解&#xff1a; 工作组就是还是局域网一样只是大一点里面的电脑很多&#xff0c;每个电脑还是都是单独的电脑没有…

解决arcmap发布影像切片,注册传输数据慢的问题

1、本地服务器进行切片步骤&#xff1a; 开发环境按照正常方案发布影像切片。 2、生产环境切片步骤 a、使用范文等同影像文件范围的矢量面数据&#xff0c;作为切片数据发布切片服务 重点&#xff1a;【服务名称必须一致】 b、获取开发环境切片的切片方案文件conf.xml 重点&am…

SSL/TLS协议信息泄露漏洞修复

概述&#xff1a;CVE-2016-2183 是一个涉及 SSL/TLS 协议信息泄露的漏洞&#xff0c;也被称为 "SWEET32" 攻击。该漏洞利用了某些对称加密算法&#xff08;如 3DES&#xff09;的弱点&#xff0c;攻击者可以通过捕获和分析大量的加密流量&#xff0c;可能会恢复明文数…

矩阵--旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 &#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&a…

数据结构——算法和算法分析

目录 算法和算法分析 算法 算法设计的要求 算法效率的度量 算法的存储空间需求 算法和算法分析 算法 算法是对特定问题求解步骤的一种描述&#xff0c;它是指令的有限序列&#xff0c;其中每一条指令表示一个或多个操作。 一个算法具有下列5个重要的特性&#xff1a; &…

Python3:多行文本内容转换为标准的cURL请求参数值

背景 在最近的工作中&#xff0c;经常需要处理一些接口请求的参数&#xff0c;参数来源形式很多&#xff0c;可能是Excel、知识库文档等&#xff0c;有些数据形式比较复杂&#xff0c;比如多行或者包含很多不同的字符&#xff0c;示例如下&#xff1a; **客服质检分析指引** …

BaseCTF [第一周]Ez Xor

笔记。 64ida打开。 走&#xff01; 逆向逆向&#xff0c;逆向往前看。 因为异或算法&#xff0c;A ^BC >>> C^BA 所以在只需要知道密钥key就可以了。 是不是头大&#xff1f; 没事 这里介绍另一种方法>>> IDA 动态调试去获取key值、密文值 。(灵活使用工…

【MATLAB源码-第253期】基于matlab的8PSK调制载波+相位+符号定时联合估计仿真,输出星座图等。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 系统背景和目标 8PSK是一种调制方式&#xff0c;其中信号的相位被分成8个不同的状态&#xff0c;每个状态代表3比特的数据。这个过程涉及将比特序列转换为相应的相位&#xff0c;经过调制后传输给接收端。在接收端&#…

硬件检测工具箱 | 入梦工具箱 v8.8

入梦工具箱&#xff08;RM Toolbox&#xff09;是一款专为硬件检测、评分和测试设计的免费开源软件。它以其小巧的体积和简洁的界面&#xff0c;迅速成为DIY玩家和硬件爱好者的首选工具。 功能特点 集成常用硬件检测工具&#xff1a;包括CPUZ、GPUZ、AIDA64等&#xff0c;全面…

HTML5简洁的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板页面11.3 模板页面21.4 模板页面31.5 模板页面41.6 模板页面5 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/1413235…

微服务CI/CD实践(一)环境准备及虚拟机创建

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;gitlabs部署 微服务CI/CD实践&#xff08;三&#xff09;nexus3部署 微服务CI/CD实践&#xff08;四&#xff09;数据库,redis,n…

JWT-JSON Web Token

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案。 1 跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 用户向服务器发送用户名和密码。服务器验证通过后&#xff0c;在当前对话(session)里面保存相关数据&#xff0c;比如用…

Golang | Leetcode Golang题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; func countNumbersWithUniqueDigits(n int) int {if n 0 {return 1}if n 1 {return 10}ans, cur : 10, 9for i : 0; i < n-1; i {cur * 9 - ians cur}return ans }