网络编程---UDP

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

2.特性:

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

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

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

**3.UDP框架:**C/S模式

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

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

ser端

cs 复制代码
#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 ip
     struct sockaddr_in ser,cli;
     ser.sin_family=AF_INET;
     //host to net short
     ser.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端

cs 复制代码
#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 short
    ser.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;
 }
相关推荐
冻柠檬飞冰走茶20 分钟前
PTA基础编程题目集 7-19 支票面额(C语言实现)
c语言·开发语言·数据结构·算法
你怎么知道我是队长35 分钟前
计算机虚拟存储管理与页面置换算法详解
服务器·网络·算法
发量惊人的中年网工2 小时前
工业视觉云边 AI 推理总是卡顿?SD-WAN 打通边缘算力互联
网络·人工智能·网络安全·云计算
AC赳赳老秦2 小时前
软著公开信息批量采集:OpenClaw 抓取软件著作权公开数据,分析企业技术布局方向
大数据·网络·人工智能·python·php·deepseek·openclaw
liuyunshengsir2 小时前
perftest 工具集ib_write_bw中的 RDMA Write 带宽测试工具手册
网络·rdma
caishenzhibiao2 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
tjjingpan2 小时前
HCIP-Datacom Core Technology V1.0_20 IPv6概述
linux·服务器·网络
我命由我123452 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
MartinYeung52 小时前
[论文学习]WASP:面向提示注入攻击的Web代理安全性基准测试
前端·网络·学习
数字融合2 小时前
透明化时空联合无缝追踪,构筑无断点全域态势感知网络专项技术
网络·人工智能·virtualenv