【Linux学习笔记52】socket编程之UDP协议

引言

TCP是一种有连接的网络协议,UDP是一种无连接的通信网络协议。两者相比之下,UDP会显得简单些。本篇笔记主要记录UDP协议的实现。

实现思路

在这里插入图片描述

  • 服务器创建套接字
  • 服务器套接字绑定ip地址以及端口号
  • 与TCP连接不同的是,UDP使用recvfrom()函数来等待接收数据,而不能使用TCP中的read()函数。因为read只有数据,没有地址。UDP每次连接都需要有地址,因此使用recvfrom()函数来接收。
  • 相对于TCP连接,UDP连接比较简单,不需要连接,实时性比较强,速度比较快。但是可靠性比较低

代码实现

server.c:

#include "head4sock.h"

int main(int argc, char const *argv[])
{
	// 创建一个UDP套接字
	int fd = Socket(AF_INET,SOCK_DGRAM,0);

  //绑定本地IP地址 和 端口
	struct sockaddr_in srvaddr;
	socklen_t len =sizeof(srvaddr);
	bzero(&srvaddr,len);

	srvaddr.sin_family=AF_INET;
	srvaddr.sin_port = htons(atoi(argv[1]));
	srvaddr.sin_addr.s_addr =htonl(INADDR_ANY);

	Bind(fd,(struct sockaddr *)&srvaddr,len);

 //接收客户端发来的信息
	char buf[SIZE];
	while (1)
	{
		bzero(buf,SIZE);
		recvfrom(fd,buf,SIZE,0,NULL,NULL);

		printf("%s",buf );
	}

	return 0;
}

client.c:

#include "head4sock.h"

int main(int argc, char const *argv[])
{
	// 创建一个UDP套接字
	int fd = Socket(AF_INET,SOCK_DGRAM,0);

  //绑定本地IP地址 和 端口
	struct sockaddr_in srvaddr;
	socklen_t len =sizeof(srvaddr);
	bzero(&srvaddr,len);

	srvaddr.sin_family=AF_INET;
 	inet_pton(AF_INET,argv[1],&srvaddr.sin_addr);//将文本的ip地址转为二进制放入addr
	srvaddr.sin_port =htons(atoi(argv[2]));


 //发送信息到服务器
	char buf[SIZE];
	while (1)
	{
		bzero(buf,SIZE);
		fgets(buf,SIZE,stdin);

		sendto(fd,buf,strlen(buf),0,(struct sockaddr *)&srvaddr,len);
	}

	return 0;
}

代码运行结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值