网络编程:UDP编程笔记

1.字节序的概念和转换

小端格式: 低位字节数据存储在低地址
大端格式: 高位字节数据存储在低地址
在这里插入图片描述
在主机上时为小端存储,在网络上时为大端,所以接收到数据时,要转为小端口
如下图:
在这里插入图片描述
#include <arpa/inet.h>
发送者调用的函数:
uint32_t htonl(uint32_t hostlong); //转ip 将32位的主机字节序转换为 网络字符节
uint16_t htons(uint16_t hostshort); //转端口 将16位的主机字节序转换为 网络字符节

接收者者调用的函数:
uint32_t ntohl(uint32_t netlong); //转ip 将32位的网络字节序转换为 主机字符节
uint16_t ntohs(uint16_t netshort); //转端口 将16位的网络字节序转换为 主机字符节

2.IP地址转换

#include <arpa/inet.h>
点分十进制 转为 32位无符号整数
转换函数:
**int inet_pton(int af , const char src , void dst);
参数:
af : 转换的协议
AF_INET (IPv4)
AF_INET6 (IPv6)
src : 点分十进制数串的首元素地址
dst : 4字节的IP地址
返回值: 成功 1 失败 -1

32位无符号整数 转为 点分十进制
**const char *inet_ntop(int af , const void src , char dst, socklen_t size);
参数:
af : 转换的协议, 如 AF_INET (IPv4) AF_INET6 (IPv6)
src :4字节的IP地址的起始地址
dst :存放点分十进制数串的起始地址
size:点分十进制数串的最大长度
#define INET_ADDRSTRLEN 16 //for ipv4
#define INET6_ADDRSTRLEN 46 //for ipv6
返回值: 成功则返回字符串的首地址; 失败则返回NULL

UDP编程

发送方:

  // 创建socket
// 创建 地址结构体 sockaddr_in   
// 准备 数据
// 发送 sendto()

ssize_t sendto(int sockfd,const void * buf,size_t nbytes, int flags,const struct sockaddr *to, socklen_t addrlen)

参数:
sockfd:套接字
buf: 发送数据缓冲区
nbytes: 发送数据缓冲区的大小
flags:一般为 0
to:指向目的主机地址结构体的指针
addrlen:to 所指向内容的长度

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main(){int sock_fd = socket(AF_INET,SOCK_DGRAM,0); // 创建socket// 创建 地址结构体 sockaddr_in  struct sockaddr_in dstaddr;dstaddr.sin_family=AF_INET;dstaddr.sin_addr.s_addr =inet_addr("192.168.74.1");dstaddr.sin_port = htons(8000);//数据char data[]="helloudp\n";//将sockaddr_in 转换为sockaddr  发送数据 sendto()ssize_t len =sendto(sock_fd,data,sizeof(data),0,(struct sockaddr *)&dstaddr,sizeof(dstaddr));close(sock_fd);return 0;
}
接收方:
  // 创建socket
// 创建 地址结构体 sockaddr_in   // 让定义的套接字固定绑定  IP 和 portwhile(1){
// 准备 数据
// 接收 recvfrom ()
}
**ssize_t recvfrom(int sockfd,void \*buf, size_t nbytes,int flags,struct sockaddr \*from,socklen_t \*addrlen);**

参数:
sockfd: 套接字
buf:接收数据缓冲区
nbytes: 接收数据缓冲区的大小
flags: 套接字标志(常为 0)
from: 源地址结构体指针,用来保存数据的来源
addrlen: from 所指内容的长度
注意:通过 from 和 addrlen 参数存放数据来源信息 ,from 和 addrlen 可以为 NULL, 表示不保存数据来源。

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
int main(){//定义一个套接字;int sfd=socket(AF_INET,SOCK_DGRAM,0);//定义IPv4 的地址结构;struct sockaddr_in localaddr;localaddr.sin_family=AF_INET; //指明 IPv4localaddr.sin_port=htons(8000);//指明端口号,转换为大端口;  ???localaddr.sin_addr.s_addr =htonl(INADDR_ANY);//表示任意的本地IP地址,转换为//让定义的套接字固定绑定  IP 和 portbind(sfd,(struct sockaddr *)&localaddr,sizeof(localaddr));//持续监听-----while(1){char buf[128];struct sockaddr_in fromaddr;  //存储 发送者的地址和端口socklen_t slen;//接收数据ssize_t len = recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr *)&fromaddr,&slen);if(len>0){buf[len]=0;//接收到数据char ip[INET_ADDRSTRLEN];//发送方的IP 转换为点分十进制,同时自动转换为小端口格式inet_ntop(AF_INET,&fromaddr.sin_addr.s_addr,ip,INET_ADDRSTRLEN);uint16_t port =ntohs(fromaddr.sin_port);//将发送方的端口转换为小格式printf("%s:%d->%s\n",ip,port,buf);if(strncmp(buf,"bye",3)==0) break;}}close(sfd);return 0;
}

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

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

相关文章

【信息学奥赛】CSP-J/S初赛06 算法基础及时间/空间复杂度等问题

本专栏&#x1f449;CSP-J/S初赛内容主要讲解信息学奥赛的初赛内容&#xff0c;包含计算机基础、初赛常考的C程序和算法以及数据结构&#xff0c;并收集了近年真题以作参考。 如果你想参加信息学奥赛&#xff0c;但之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#…

AI与学术的交响:ChatGPT辅助下的实验设计新篇章

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术研究中&#xff0c;实验设计是确保研究质量和结果可信度的关键环节。这篇文章我们将为大家介绍如何利用ChatGPT辅助完成学术论文的实验设计&#xff0c;通过提供灵感、优化实验步…

VUE Pinia状态持久化

效果 实现方法 插件&#xff1a;pinia-plugin-persistedstate 链接地址 具体操作 安装 npm i pinia-plugin-persistedstate 添加到 pinia 实例上 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia cre…

K8s 集群(kubeadm) CA 证书过期解决方案

Author&#xff1a;Arsen Date&#xff1a;2024/07/04 目录 一、现象描述二、解决方案三、集群验证 一、现象描述 之前有篇文章《K8s Token 过期解决方案&#xff08;Kubeadm&#xff09;》提到了默认生成的 Token 有效期只有 24 小时&#xff0c;过期后 Token 将不可用&#…

B端系统设计风格简洁与高效的完美融合

B端系统设计风格简洁与高效的完美融合

CIDEr(Consensus-based Image Description Evaluation)的计算

CIDEr&#xff08;Consensus-based Image Description Evaluation&#xff09; 论文原文 CIDEr: Consensus-based Image Description Evaluation CIDEr&#xff08;Consensus-based Image Description Evaluation&#xff09;是一种用于自动评估图像描述&#xff08;image ca…

基于java语言+ Vue+ElementUI+ MySQL8.0.36数字化产科管理平台源码,妇幼信息化整体解决方案

基于java语言 VueElementUI MySQL8.0.36数字化产科管理平台源码&#xff0c;妇幼信息化整体解决方案 数字化产科管理平台是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。该系统由门诊系统、住院系统、数据统计模块三部分组…

web零碎知识

&nbsp 在html文件中 连续的空格会被认为是一个空格 所以我们需要使用&nbsp来代表空格 &#x3000 把这个当成tab键来使用 我们可以引入js文件&#xff0c;就可以减少html文件的长度。 首先创建一个js文件夹&#xff0c;然后在js文件夹中创建一个&#xff0c;后缀…

数据库表导出到excel:前置知识4 业务和效果

清单配置页面(就是配置那些用户可以下载那些表内容,清单下载实际就是指数据库表下载,清单就是对应的表) 比如:导出一个atom_base_info表数据(数据多) atom_base_info的数据结构 下面这个配置审核状态一类不问&#xff0c;直接到清单下载页面 发起自己想下载的清单(先异步把数…

FreeRTOS之队列上锁和解锁(详解)

这篇文章将记录我学习实时操作系统FreeRTOS的队列上锁和解锁的知识&#xff0c;在此分享给大家&#xff0c;希望我的分享能给你带来不一样的收获&#xff01; 目录 一、简介 二、队列上锁函数prvLockQueue&#xff08;&#xff09; 1、函数初探 2、应用示例 三、队列解锁函…

js之模糊搜索

多的不说 少的不唠 直接上代码

警翼警用记录仪视频格式化后恢复方法

警翼是国内较大的一家警用记录仪厂商&#xff0c;此品牌我们恢复过很多&#xff0c;此次遇到的是一个典型的误格式化的情况&#xff0c;我们来看看误格式化后如何恢复。 故障存储: 32G卡/fat32 故障现象: 客户提供的信息是在交接设备后没有及时备份而做出了初始化设备的操…

养老院管理系统-计算机毕业设计源码00010

养老院管理系统的设计与实现 摘要 本文介绍了一种基于Spring Boot框架的养老院管理系统的设计与实现。该系统旨在帮助养老院管理者更有效地管理机构内的各项事务&#xff0c;并提供更好的服务于老年人。系统的设计考虑了养老院管理的特殊需求&#xff0c;包括系统用户、老人信息…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位&#xff0c;对于信息学奥赛已经不陌生了&#xff0c;部分同学也已经开始踏入信息学的旅程&#xff0c;但前路茫茫&#xff0c;让我们一起看看已经取得成就的同学的经历吧。 今天要介绍的这位同学&#xff0c;是来自深圳中学的高二某班的欧阳达晟同学&#x…

简洁纯文字类的Typecho主题wenso

主题介绍 文章说说类博客网站源码&#xff0c;页面清新简洁。适合文章说说美文博客网站建站使用&#xff0c;响应式手机版本。 本来是dedecms的模板&#xff0c;也比较简单&#xff0c;适合用来搭建一个文学类的&#xff0c;纯文字的网站&#xff0c;简单的改成了typecho&…

JVM 堆内存结构 年轻代 老年代

堆内存 内存划分 对于大多数应用&#xff0c;Java 堆是 Java 虚拟机管理的内存中最大的一块&#xff0c;被所有线程共享。此内存区域的唯一目的就是存放对象实例&#xff0c;几乎所有的对象实例以及数据都在这里分配内存。 为了进行高效的垃圾回收&#xff0c;虚拟机把堆内存…

小白 | 华为云docker设置镜像加速器

一、操作场景 通过docker pull命令下载镜像中心的公有镜像时&#xff0c;往往会因为网络原因而需要很长时间&#xff0c;甚至可能因超时而下载失败。为此&#xff0c;容器镜像服务提供了镜像下载加速功能&#xff0c;帮助您获得更快的下载体验。 二、约束与限制 构建镜像的客…

6年铲屎官测评宠物空气净化器哪款好,热门养宠空气净化器排名

作为一名资深猫奴&#xff0c;发现很多铲屎官每到春秋换季就开始疯狂打喷嚏、突然开始全身过敏。其原因是猫毛一到换季就开始疯狂掉毛&#xff0c;相对于可见猫毛&#xff0c;漂浮在空气中的浮毛就是罪灰祸首。微小的浮毛在空气总容易被人体吸入体内&#xff0c;而浮毛上面附带…

【Python机器学习】模型评估与改进——在模型选择中使用评估指标

我们通常希望&#xff0c;在使用GridSearchCV或cross_val_score进行模型选择时能够使用AUC等指标。scikit-learn提供了一种非常简单的实现方法&#xff0c;那就是scoring参数&#xff0c;它可以同时用于GridSearchCV和cross_val_score。你只需要提供一个字符串&#xff0c;用于…