网络编程---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;
 }
相关推荐
裕晟资质规划12 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
轻舟技术A12 小时前
Provider 不属于 Agent 核心:rpi 的分层理由与收益
服务器·网络
爱读书的小胖13 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
Escalating_xu13 小时前
【Linux 网络编程】TCP Socket 编程(上):从 listen、accept 到完整回显通信
linux·网络·tcp/ip
NetX行者13 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python
Yang961113 小时前
从相位噪声到实时带宽:HD-063B支撑的频谱实验项目
网络
happyprince13 小时前
01-整体观-DeepSeek-V4.1-Flash全貌解读
网络
是真的小外套13 小时前
2023年软考中级信息安全工程师|选择题考点+5道案例分析真题解析(含答案)
java·服务器·网络
Code_Solitude13 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
鸽鸽程序猿14 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言