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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浅谈搜索引擎技术原理与架构设计_小米商城搜索引擎架构

    浅谈搜索引擎技术原理与架构设计_小米商城搜索引擎架构搜索引擎是我们非常熟悉的互联网产品,上网都离不开搜索,毫无疑问,在pc端,是多数流量的入口。大家都会说,“有问题,百度一下”,当初百度靠这句广告语,打开了国内很大的市场。曾经看过一个百度员工写的段子:

    2022年8月1日
  • e代表的是什么_E判断什么意思

    e代表的是什么_E判断什么意思导读1、计算器中的【e】生活中我们经常能在计算器上,计算机的计算过程中经常会看到一个【e】这个e是代表:超过了计算器的显示位数而使用了科学计数法。E是exponent,表示以10为底的指数。此格式用指数表示法显示数字,以E+n替换部分数字,其中E(代表指数)表示将前面的数字乘以10的n次幂。例如,用2位小数的“科学记数”格式表示12345678910,结果为1.23E+10,即1.23乘以10的10次幂。1.234567898765432e+16=1.2

    2022年10月28日
  • C++中decltype与左值和右值「建议收藏」

    1decltype关键字decltype是C++11中引入的新的类型说明符。编译器根据分析表达式或者函数返回值来分析其类型。decltype的详细用法,请参考《C++中decltype的使用方法》2decltype与左值和右值decltype后面跟的表达式是左值或者右值时,编译器分析的类型会有所不同。如果表达式(非单个变量)的求值结果是左值,则编译器会得到一个引用类型;如果表达式(非单个变量)的求值结果是右值,则编译器会得到一个与表达式相同的类型。intarr[2]={10,2.

    2022年4月8日
  • 频段划分_世界各国频段划分

    频段划分_世界各国频段划分电磁波频段的划分射频(300KHz-300MHz):包括LF,MF,HF,VHF微波(300MHz-3000GHz):包括UHF,SHF,EHF,PHF微波频段的划分波段频率范围/GHzUHF0.3-1.12L1.12-1.70LS170-2.60S2.60-3.95C3.95-5.85XC5.85-8.20X8.2…

    2022年4月20日
  • 用计算机亩换算成平方,亩平米换算(平方米换算亩计算器)[通俗易懂]

    1平方米(㎡)=0.0015亩1亩=666.6666667平方米(㎡)平方米(㎡,英文:.方英里=10.763910417平方英尺=0.0015亩单位换算就是把平方米换算成平方分米、平方厘.使用国家规定的换算公式来进行换算。基本单位数量换算(按使用频率排序)。1亩=666.67平方米100平方米=0.15亩——就是农民朋友口语说的一分半地。1000平方米=1..1公顷=100公亩=10000平方…

    2022年4月9日
  • C++数据结构——队列「建议收藏」

    C++数据结构——队列「建议收藏」C++数据结构——队列参考博客:http://www.cnblogs.com/QG-whz/p/5171123.htmlhttp://www.169it.com/article/2718050585107790752.html1、队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点:(1)队列中的数据元素遵循“先进先出”(FirstInFirstOut)的原则,简称FIFO结构;(…

    2022年5月5日

发表回复

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

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