【网络编程】UDP通信基础模型实现

udpSer.c

复制代码
#include<myhead.h>
#define SER_IP "192.168.119.143"
#define SER_PORT 7777
int main(int argc, const char *argv[])
{
	//1.创建
	int sfd = socket(AF_INET,SOCK_DGRAM,0);
	if(sfd == -1)
	{
		perror("socket error");
		return -1;
	}
	//2.连接
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;//通讯域
	sin.sin_port = htons(SER_PORT);//端口号
	sin.sin_addr.s_addr = inet_addr(SER_IP);//ip地址
	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
	{
		perror("bind error");
		return -1;
	}
	printf("bind success\n");
	//3.数据收发
	char buf[128]="";
	struct sockaddr_in cin;//接收对端地址信息
	socklen_t addrlen = sizeof(cin);//接收地址长度
	while(1)
	{
		bzero(buf,sizeof(buf));//清空数据
		if(recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen)==-1)//接收数据
		{
			perror("recvfrom error");
			return -1;
		}
		if(strcmp(buf,"quit")==0)
		{
			printf("服务端退出\n");
			break;
		}
		printf("接收到的数据是:%s\n",buf);
		bzero(buf,sizeof(buf));
		strcat(buf,"*-*");
		if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin))==-1)//发送数据
		{
			perror("sendto error");
			return -1;
		}
	}
	//4.关闭
	close(sfd);
	return 0;
}

udpCli.c

复制代码
#include<myhead.h>
#define SER_IP "192.168.119.143"
#define SER_PORT 7777
#define CLI_IP "192.168.119.143"
#define CLI_PORT 9999
int main(int argc, const char *argv[])
{
	//1.创建套接字
	int cfd = socket(AF_INET,SOCK_DGRAM,0);
	if(cfd == -1)
	{
		perror("socket error");
		return -1;
	}
	//2.绑定
	struct sockaddr_in cin;//客户端地址
	cin.sin_family = AF_INET;//地址族
	cin.sin_port = htons(CLI_PORT);//端口
	cin.sin_addr.s_addr = inet_addr(CLI_IP);//IP地址
	if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)//绑定
	{
		perror("bind error");
		return -1;
	}
	//3.数据收发
	char buf[128]="";
	struct sockaddr_in sin;//服务器地址
	sin.sin_family = AF_INET;//地址族
	sin.sin_port = htons(SER_PORT);//端口
	sin.sin_addr.s_addr = inet_addr(SER_IP);//IP地址
	while(1)
	{
		bzero(buf,sizeof(buf));//数据初始化
		printf("请输入>>>");
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1]=0;
		sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin));//发送数据
		if(strcmp(buf,"quit")==0)
		{
			printf("客户端退出\n");
			return -1;
		}
		recvfrom(cfd,buf,sizeof(buf),0,NULL,NULL);//接收数据
		printf("接收到的数据是:%s\n",buf);
	}
	//4.关闭
	close(cfd);
	return 0;
}

效果展示

相关推荐
晏宁科技YaningAI2 分钟前
全球短信路由系统设计逻辑打破 80%送达率瓶颈:工程实践拆解
网络·网络协议·架构·gateway·信息与通信·paas
WIN-U61 小时前
新版华三H3C交换机配置NTP时钟步骤 示例(命令及WEB配置)
网络协议·tcp/ip·http
爱学习的小囧1 小时前
ESXi 8.0 无法选择分区方式 小白级详细解决办法
运维·服务器·网络·虚拟化·esxi8.0
F1FJJ1 小时前
什么是 Shield CLI?视频讲解:一条命令,可浏览器远程访问一切内部服务(RDP/VNC/SSH/数据库等)
运维·网络·数据库·网络协议·ssh
南湖北漠2 小时前
听说拍照的人会拿相似的鱼皮豆代替野生鹌鹑蛋拍照(防原创)
网络·人工智能·计算机网络·生活
一个有温度的技术博主2 小时前
网安实验系列四:信息收集-旁站、C段信息
网络
木下~learning2 小时前
对于Linux中等待队列和工作队列的讲解和使用|RK3399
linux·c语言·网络·模块化编程·工作队列·等待队列
F1FJJ2 小时前
Shield CLI 命令全解析:15 个命令覆盖所有远程访问场景
网络·数据库·网络协议·容器·开源软件
攻城狮在此3 小时前
华为汇聚交换机DHCP中继配置
网络·华为
婷婷_1723 小时前
【PCIe验证每日学习·阶段复盘01】Day1~Day7 纯理论深度复盘
网络·程序人生·芯片·每日学习·pcie 验证·ic 验证·pcie学习