IMX8M学习--MYZR-i.MX8M-EVK网络应用编程(UDP)

UDP协议
1、与TCP协议对比

相同:UDP协议与TCP协议一样,都是属于网络体系模型中传输层。
不同:UDP协议面向一种无连接方式,不可靠方式。 类似 现实例子: 寄信

2、 UDP协议的工作流程
服务器: 只需要创建套接字socket与绑定地址bind,不需要设置监听listen与接收accept。
客户端: 只需要创建套接字socket,不需要连接connect。

在UDP协议中,不能使用send()与recv(),只能使用sendto()与recvfrom()。

服务器:

int main(int argc,char *argv[])  //  ./server 50002
{
	//1. 创建一个UDP协议的套接字
	int sockfd = socket(AF_INET,SOCK_DGRAM,0); 
	//2. 绑定地址
	struct sockaddr_in srvaddr,cliaddr;
	socklen_t len = sizeof(srvaddr);
	bzero(&srvaddr,len);
	bzero(&cliaddr,len);
	
	srvaddr.sin_family = AF_INET;
	srvaddr.sin_port = htons(atoi(argv[1]));
	srvaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
	
	bind(sockfd,(struct sockaddr *)&srvaddr,len);
	
	//3. 等待对方给自己发来消息
	char buf[50];
	while(1)
	{
		bzero(buf,50);
		recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&cliaddr,&len);
		printf("from %s client:%s",(char *)inet_ntoa(cliaddr.sin_addr),buf);
		
		if(strncmp(buf,"quit",4) == 0)
			break;
	}
	//4. 销毁信箱
	close(sockfd);
	return 0;
}

客户端:

int main(int argc,char *argv[])  //  ./client 192.168.12.8 50002
{
	//1. 创建一个UDP协议的套接字
	int sockfd = socket(AF_INET,SOCK_DGRAM,0); //sockfd是UDP套接字
	
	//2. 准备对方的地址
	struct sockaddr_in srvaddr;
	socklen_t len = sizeof(srvaddr);
	bzero(&srvaddr,len);
	
	srvaddr.sin_family = AF_INET;
	srvaddr.sin_port = htons(atoi(argv[2]));
	inet_pton(AF_INET,argv[1],&srvaddr.sin_addr);
	//3. 直接写信
	char buf[50];
	while(1)
	{
		bzero(buf,50);
		fgets(buf,50,stdin);
		sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&srvaddr,len);
		
		if(strncmp(buf,"quit",4) == 0)
			break;
	}
	
	//4.销毁
	close(sockfd);
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值