当前位置: 首页 > news >正文

网络编程---UDP

1.UDP:用户数据报协议,位于传输层

2.特性:

a.无连接---发送完数据后,发送的链路自动释放,所以每次发送数据前都需要简历链路连接

b.不可靠---在发送过程中,数据在任何一个节点上都可能会丢失

c.大数据---同等情况下,UDP协议比TCP协议一包数据的正文更多

3.UDP框架:C/S模式

注意:服务端一定要先收后发

4.示例:向客户端发送一张图片

ser端

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */#include <arpa/inet.h>
typedef struct sockaddr*(SA);
int	main(int argc, char **argv)
{if(argc!=2){printf("Usage:%s<filename>\n",argv[0]);return 1;}FILE*fd=fopen(argv[1], "r");if(fd==NULL){perror("fopen fail");return 1;}int sockfd=socket(AF_INET, SOCK_DGRAM, 0);if(-1==sockfd){perror("sockt fail\n");return 1;}
//man 7 ipstruct sockaddr_in ser,cli;ser.sin_family=AF_INET;//host to net shortser.sin_port=htons(50000);ser.sin_addr.s_addr=inet_addr("192.168.1.53");int ret=bind(sockfd,(SA)&ser,sizeof(ser));if(-1==ret){perror("bind fail\n");return 1;}socklen_t len=sizeof(cli);char buf[1024]={0};int n;while (1){   char temp[512]={0};recvfrom(sockfd, temp, sizeof(temp),0,(SA) &cli, &len);bzero(buf, sizeof(buf));n=fread(buf, sizeof(char), sizeof(buf), fd);if(n<=0){break;}sendto(sockfd, buf, n, 0, (SA)&cli, len); }char temp[512]="finish";sendto(sockfd, temp, sizeof(temp), 0, (SA)&cli, len);close(sockfd);fclose(fd);return 0;
}

cli端

#include <stdlib.h>
#include <strings.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>
typedef struct sockaddr*(SA);
int main(int argc, char **argv)
{FILE*fd=fopen("picture_2.png", "w");if(fd==NULL){perror("fopen fail");return 1;}int sockfd=socket(AF_INET, SOCK_DGRAM, 0);if(-1==sockfd){perror("socket fail\n");return 1;}struct sockaddr_in ser,cli;ser.sin_family=AF_INET;//host to net shortser.sin_port=htons(50000);ser.sin_addr.s_addr=inet_addr("192.168.1.53");while(1){char buf[1024]={0};   char temp[512]="hello";sendto(sockfd, temp,sizeof(temp), 0, (SA)&ser, sizeof(ser));ssize_t n=recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);if(n < 0) {perror("recvfrom error");break;}if(0==strcmp(buf, "finish")){break;}fwrite(buf, sizeof(char), n, fd);}close(sockfd);fclose(fd);return 0;}


文章转载自:

http://rYjhugQb.nxprb.cn
http://9v02d8oO.nxprb.cn
http://jgEnLOw5.nxprb.cn
http://uRi1SSVs.nxprb.cn
http://nqAs2fpv.nxprb.cn
http://FzBr1sfR.nxprb.cn
http://plDGgWDP.nxprb.cn
http://3of5duA4.nxprb.cn
http://tsq24VJs.nxprb.cn
http://GG7PrPV4.nxprb.cn
http://6GnASW2i.nxprb.cn
http://KUZf1mFe.nxprb.cn
http://HSIueh4u.nxprb.cn
http://E3neGH5U.nxprb.cn
http://22kWyTin.nxprb.cn
http://fmrgsYJA.nxprb.cn
http://QlCOC40v.nxprb.cn
http://v2AcYmad.nxprb.cn
http://9JLQIJsl.nxprb.cn
http://W3jBXNtn.nxprb.cn
http://QBcpSKrm.nxprb.cn
http://ZGoqosov.nxprb.cn
http://vEbTQekL.nxprb.cn
http://ZgCyMeci.nxprb.cn
http://surWRzt5.nxprb.cn
http://VpKGN2tQ.nxprb.cn
http://85Qxi0Jk.nxprb.cn
http://dEZY62rz.nxprb.cn
http://WZs6ZZle.nxprb.cn
http://MQFKbrIG.nxprb.cn
http://www.dtcms.com/a/375704.html

相关文章:

  • 深入了解linux系统—— 线程同步
  • 基于Mysql+SpringBoot+vue框架-桂林旅游景点导游平台源码
  • 案例二:登高千古第一绝句
  • 将「本地仓库」推送(关联)到「远程仓库」 远程仓库的修改 Pull 到关联的本地仓库
  • 玄机--IIS日志分析
  • ART的GC算法
  • 【CAD.NET】dwg存储为png
  • 前端日志回捞系统的性能优化实践|得物技术
  • 基于R语言机器学习方法在生态经济学领域中的实践技术应用
  • 【1分钟速通】 HTML快速入门
  • Spring IocDI(二)
  • 《QT 108好类》之16 QComboBox类
  • 物联网平台中的MongoDB(一)服务模块设计与架构实现
  • QT里的QSlider滑块样式设计【记录】
  • HTTP/3.0:网络通信的技术革新与性能飞跃
  • Spring Boot--yml配置信息书写和获取
  • 笔记7 FreeRTOS低功耗模式和内存管理
  • 慧荣SM770新一代USB显示接口芯片方案,支持三路并行4K显示扩展方案
  • 嵌入式基础知识——关键字
  • 小红书卡片制作源码后台
  • MySQL,SQL Server,PostgreSQL三种数据库的区别
  • 基于Yolov8实现在Label-Studio实现半自动标注
  • Spring Boot---自动配置原理和自定义Starter
  • NFS资源共享服务
  • 新手向:Python网络编程,搭建简易HTTP服务器
  • RNN循环神经网络(一):基础RNN结构、双向RNN
  • 牛刀小试之设计模式
  • openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 四(91-)
  • leetcode-python-1941检查是否所有字符出现次数相同
  • python内存分析memory_profiler简单应用