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


相关推荐

  • @JsonFormat、@JSONField、@DateTimeFormat的使用以及其区别[通俗易懂]

    三者出处1、JsonFormat来源于jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。2、JSONField来源于fastjson,是阿里巴巴…

    2022年4月17日
    54
  • PLC的基本知识_网络基础知识培训

    PLC的基本知识_网络基础知识培训本人接触的比较多的PLC为三菱和欧姆龙,故主要以三菱PLC为例开始记录。在学习PLC之前,首先要明白PLC的优缺点,即为什么要用PLC,直接用PC服务器或者单片机嵌入式不行吗?PLC有五个特点:(1)可靠性高、抗干扰能力强;(2)灵活性好、扩展性能强;(3)控制速度快、稳定性强;(4)延时调整方便,精度高;(5)系统设计安装块、维修方便。其实最重要的就两个字,稳定。像单片机这种负荷一高就烧板子,在电磁干扰强的地方也无法正常工作。PC服务器更是无法胜任多种IO输出,控制现场…

    2025年9月1日
    5
  • pci-e无线网卡_主板自带无线网卡吗

    pci-e无线网卡_主板自带无线网卡吗技嘉BXBT1900无线网卡的miniPCIE接口转装msata/ngffsata盘上次的博文《minipcie/msata接口改装nvmessd/ngffsatassd方法及速率》,介绍的是将无线网卡的miniPCIE接口转装nvme固态盘,或者是将msata接口转装ngffsata盘。然而不然人希望能在无线网卡的miniPCIE接口装上msata/ngffsata盘。以下这款转卡就是可以实现这样的需求。而且CDE款是可以同时转2个固态盘的。现以技嘉主板BXBT190

    2025年8月27日
    6
  • 我现在A函数开启事务,然后调用B函数,B函数中也开启了事务

    我现在A函数开启事务,然后调用B函数,B函数中也开启了事务

    2022年2月8日
    45
  • PYTHON 全栈工程师「建议收藏」

    PYTHON 全栈工程师「建议收藏」FSDDevelopmentwithPython:全栈工程师,FSD(FullStackDeveloper),在PYTHONRestfulService软件开发上主要包括:明确开

    2022年7月6日
    23
  • MySQL 对于千万级的大表要怎么优化?

    MySQL 对于千万级的大表要怎么优化?

    2021年10月15日
    36

发表回复

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

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