如何分析UDP协议
发布时间 - 2023-05-12 00:00:00 点击率:次一、套接字(socket)
套接字socket: ip地址 + port端口号。在TCP/IP协议中,它唯一标识网络通讯中的一个进程。套接字用来描述网络连接的 一对一关系。
TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据)。
二、UDP_SOCKET 相关
UDP 协议 ---- 用户数据报协议(面向非连接) --- SOCK_DGRAM
h表示host,n表示network,l表示32位长整数,s表示16位短整数。
IPv4地址格式定义在netinet/in.h中,IPv4地址: sockaddr_in结构体,包括16位端口号和32位IP地址
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};三、UDP socket 实例:
//udp_server.c
#include#include #include #include #include #include #include #include #include void usage(const char *proc) { printf("%s:[ip][port]\n",proc); } int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } char *_ip=argv[1]; int _port=atoi(argv[2]); int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("socket"); exit(1); } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0) { perror("bind"); exit(2); } int done=0; char buf[1024]; struct sockaddr_in client; socklen_t len=sizeof(client); while(!done) { ssize_t _size=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(_size > 0) { buf[_size]='\0'; printf("[%s : %d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); } else if(_size == 0) { printf("client close...\n"); } else {} } return 0; }
//udp_client.c
#include#include #include #include #include #include #include #include #include void usage(const char *proc) { printf("%s:[ip][port]\n",proc); } int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } char *_ip=argv[1]; int _port=atoi(argv[2]); int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("socket"); exit(1); } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0) { perror("bind"); exit(2); } int done=0; char buf[1024]; struct sockaddr_in client; socklen_t len=sizeof(client); while(!done) { ssize_t _size=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(_size > 0) { buf[_size]='\0'; printf("[%s : %d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); } else if(_size == 0) { printf("client close...\n"); } else {} } return 0; }
运行结果:
# 端口号
# brush
# class
# false
# toolbar
# cpp
# netinet
# pre
# sockaddr_in
# struct
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
详解Android图表 MPAndroidChart折线图
如何快速配置高效服务器建站软件?
如何正确下载安装西数主机建站助手?
怎样使用JSON进行数据交换_它有什么限制
网页设计与网站制作内容,怎样注册网站?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel如何升级到最新版本?(升级指南和步骤)
开心动漫网站制作软件下载,十分开心动画为何停播?
简单实现Android文件上传
零服务器AI建站解决方案:快速部署与云端平台低成本实践
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel storage目录权限问题_Laravel文件写入权限设置
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
JS实现鼠标移上去显示图片或微信二维码
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
php 三元运算符实例详细介绍
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何在万网开始建站?分步指南解析
如何在万网ECS上快速搭建专属网站?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
如何在IIS中新建站点并配置端口与物理路径?
Laravel如何使用Gate和Policy进行授权?(权限控制)
微信小程序 input输入框控件详解及实例(多种示例)
Python进程池调度策略_任务分发说明【指导】
如何在阿里云服务器自主搭建网站?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
再谈Python中的字符串与字符编码(推荐)
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
教学论文网站制作软件有哪些,写论文用什么软件
?
iOS正则表达式验证手机号、邮箱、身份证号等
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
jquery插件bootstrapValidator表单验证详解
Python结构化数据采集_字段抽取解析【教程】
如何在阿里云虚拟服务器快速搭建网站?
如何为不同团队 ID 动态生成多个非值班状态按钮
如何快速启动建站代理加盟业务?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
,交易猫的商品怎么发布到网站上去?

