首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于UDP编程_udp详解

基于UDP编程_udp详解

作者头像
全栈程序员站长
发布2022-10-03 16:59:18
发布2022-10-03 16:59:18
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

基于UDP编程 1 UDP是数据报协议,无连接的,不可靠,追求传输效率的一种通信协议数据的发送和接收是同步的.在进行通信之前,不需要建立连接.其传输效率比TCP高.对其服务器而言,并没有三次握手的过程.因此和TCP相比,少了被动监听(listen)和(accept).只需要创建通信设备,绑定IP地址和端口号.然后进行数据的收发.

1.服务器端的编程模型

  1. 创建一个socket端点,返回该端点的文件描述符fd socket(2) 2 )将fd和本地地址绑定 bind(2)

while(1){ 3) 阻塞等待客户端消息 recvfrom(2) 4 )处理客户消息 5 )将处理结果发送给客户端 sendto(2) } 2 客户端的编程模型 1 创建一个socket端点 socket(2) 2 使用fd设备向服务器发送消息 sendto(2) 3 阻塞等待服务器的响应消息 recvfrom(2) 4 处理响应消息 4 关闭fd设备 close(2)

编程实现 服务器端

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <t_net.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
int main(void){ 

SA4 cli;
char buf[128];
socklen_t len;
int fd = bind_sock(AF_INET,SOCK_DGRAM,8000);
if(fd == -1){ 

printf("%s\n",strerror(errno));
return -1; 
}   
while(1){ 

len = sizeof(cli);
int recv = recvfrom(fd,buf,128,0,(SA*)&cli,&len);
if(recv == -1){ 

printf("%s\n",strerror(errno));
return -1;
}
for(int i = 0;i < recv;i++){ 

buf[i] = toupper(buf[i]);
}
sendto(fd,buf,recv,0,(SA*)&cli,sizeof(cli));
}
return 0;
}                                                                     ``

关于t_net.h,参见博主上一篇博客:TCP并发服务的实现 客户端

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <errno.h>
#include <t_net.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc,char* argv[]){ 

char msg[128];
char buf[128];
int fd = socket(AF_INET,SOCK_DGRAM,0);
if(fd == -1){ 

printf("%s\n",strerror(errno));
return 0;
}   
SA4 serv;
serv.sin_family = AF_INET;
serv.sin_port = htons(8000);
inet_pton(AF_INET,argv[1],&serv.sin_addr);
while(1){ 

gets(msg);
//printf("%d\n",sizeof(msg));
sendto(fd,msg,strlen(msg) + 1,0,(SA*)&serv,sizeof(serv));
int recv = recvfrom(fd,buf,sizeof(buf),0,NULL,NULL);
if(recv > 0){ 

//write(1,buf,recv);
printf("%s\n",buf);
if(strcmp(buf,"BYEBYE") == 0) break;
}
}
close(fd);
return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197204.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月4日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档