如何分析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 动态生成多个非值班状态按钮  如何快速启动建站代理加盟业务?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  ,交易猫的商品怎么发布到网站上去?