linux socket udp编程_linux网络编程socket

linux socket udp编程_linux网络编程socket浅谈UDP。UDP是一种不可靠的、无连接的、数据报服务。发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP数据报发送。接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。2.客户端3.输出结果UDP是一种无连接的传输方式,所以可以多个客户端同时发送。服务器端关闭立马重启,客户

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺



前言

浅谈UDP。

提示:以下是本篇文章正文内容,下面案例可供参考

一、UDP是什么

UDP是一种不可靠的、无连接的、数据报服务。

二、UDP 数据报服务特点

发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报发送。接收端必须及时针对每一个 UDP 数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。
在这里插入图片描述
因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。

二、UDP 编程流程

在这里插入图片描述

1.服务器

代码如下(示例):

int main()
{ 
   
	int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    assert( sockfd != -1 );

	struct sockaddr_in saddr,caddr;
 	memset(&saddr,0,sizeof(saddr));
 	saddr.sin_family = AF_INET;
 	saddr.sin_port = htons(6000);
	saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

	int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
	assert( res != -1 );

	while(1)
	{ 
   
		int len=sizeof(caddr);
		char buff[128]={ 
   0};
		recvfrom(sockfd,buff,127,0,(strcut sockaddr*)&caddr,&len);
		printf("buff=%s\n",buff);
		if(strncmp(buff,"end",3)==0)
		{ 
   
			break;
		}
		sendto(sockfd,"ok",2,0,(struck sockaddr*)&caddr,sizeof(caddr));
	}
	close(sockfd);
	exit(0);
}

2.客户端

代码如下(示例):

int main()
{ 
   
	int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    assert( sockfd != -1 );

	struct sockaddr_in saddr;
 	memset(&saddr,0,sizeof(saddr));
 	saddr.sin_family = AF_INET;
 	saddr.sin_port = htons(6000);
	saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

	while(1)
	{ 
   
		char buff[128]={ 
   0};
		printf("input\n");
		fgets(buff,127,stdin);
		if(strncmp(buff,"end",3)==0)
		{ 
   
			break;
		}
		sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));
		memset(&buff,128,0);
		int len=sizeof(saddr);
		recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
		printf("recv:%s\n",buff);
	}
	close(sockfd);
	exit(0);
}

3.输出结果

在这里插入图片描述

总结

UDP是一种无连接的传输方式,所以可以多个客户端同时发送。
服务器端关闭立马重启,客户端仍然可以发送数据。服务器端也可以立即收数据。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196086.html原文链接:https://javaforall.net

(0)
上一篇 2025年10月3日 下午9:43
下一篇 2025年10月3日 下午10:22


相关推荐

  • jstack命令 详解

    jstack命令 详解1 介绍 jstack 用于打印出给定的 java 进程 ID 或 core nbsp file 或远程调试服务的 Java 堆栈信息 如果是在 64 位机器上 需要指定选项 J d64 Windows 的 jstack 使用方式只支持以下的这种方式 jstack nbsp l nbsp pid 如果 java 程序崩溃生成 core 文件 jstack 工具可以用来获得 core 文件的 java nbsp stack 和 native nbsp stack 的信

    2026年3月20日
    2
  • 讯飞星火认知大模型.pptxVIP

    讯飞星火认知大模型.pptxVIP

    2026年3月14日
    1
  • pycharm中最常用的10个快捷键总结_PyCharm快捷键

    pycharm中最常用的10个快捷键总结_PyCharm快捷键代码编辑快捷键序号快捷键作用1CTRL+ALT+SPACE快速导入任意类2CTRL+SHIFT+ENTER代码补全3SHIFT+F1查看外部文档4CTRL+Q快速查找文档5CTRL+P参数信息(在方法中调用的参数)6CTRL+MOUSEOVERCODE基本信息7CTRL+F1显示错误或警告的描述8CTRL+I…

    2022年8月25日
    8
  • swift中的计算属性

    swift中的计算属性ComputedProp classes structures andenumerati whichdonotac Instead theyprovidea

    2026年3月16日
    1
  • 基于51单片机的贪吃蛇游戏设计_单片机制作小游戏

    基于51单片机的贪吃蛇游戏设计_单片机制作小游戏基于51单片机的贪吃蛇游戏前言:这篇文章是我当时制作完成后写的总结,已经过去了一段时间,苦于找不到实物的图片,就把全文都粘贴到了下面。今天是11月2日,昨天我完成了我的贪吃蛇的制作。那个战线一个多月,让我煞费苦心的工作。在这一过程中,学到了许多新知识,也认识了许多新朋友,无论星火杯结果如何,它都将成为我的大学生涯,甚至一生中宝贵的财富。所以我决定将我学到的,想到的都写下来,给将来的

    2025年6月24日
    3
  • SIFT 尺度空间

    SIFT 尺度空间   最近也注意一些图像拼接方面的文章,很多很多,尤其是全景图拼接的,实际上类似佳能相机附加的软件,好多具备全景图拼接,多幅图像自动软件实现拼接,构成(合成)一幅全景图像(风景)。Sift算法,我略知一二,无法仔细描述(刚也贴了2个最近的资料)。     当就尺度空间(scalespace),我想,其在计算机视觉(ComputerVision)/图像的多分辨率分析(尤其近年来小波的多分

    2022年10月10日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号