首页 > 其他分享 >用udp协议传输文件

用udp协议传输文件

时间:2024-06-05 19:55:34浏览次数:20  
标签:文件 udp addr errno 传输 host include buf

用udp协议传输文件

目录

头文件/宏定义

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <time.h>
#include <pthread.h>
#include <netinet/tcp.h>
#include <unistd.h>
#include <strings.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>

// 缓存区大小
#define BUFFER 512

客户端

/********************************************************************
 *
 * name  :  main    客户端
 * function :  使用udp网络协议从服务器发送音频文件到客户端
 * argument :
 *    @n  :arg
 *
 * retval  :  none
 * author  :  [email protected]
 * date  :  2024年6月4日
 *  note  :
 *
 * *****************************************************************/

int main(int argc, char const *argv[])
{

    // 1.创建UDP套接字
    int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
    if (udp_socket == -1)
    {
        fprintf(stderr, "udp socket error,errno:%d,%s\n", errno, strerror(errno));
        exit(1);
    }

    // 2.需要先绑定主机的端口和地址
    struct sockaddr_in host_addr;
    host_addr.sin_family = AF_INET;                                     // 协议族,是固定的
    host_addr.sin_port = htons(atoi(argv[1]));                          // 目标端口,必须转换为网络字节序
    host_addr.sin_addr.s_addr = inet_addr(argv[2]);                     // 目标地址 "192.168.64.xxx"  已经转换为网络字节序
    bind(udp_socket, (struct sockaddr *)&host_addr, sizeof(host_addr)); // 绑定

    // 3.创建接收文件
    int fd_mp3 = open("./my.mp3", "wb");
    if (fd_mp3 == -1)
    {
        fprintf(stderr, "open my.mp3 error,errno:%d,%s\n", errno, strerror(errno));
        exit(1);
    }

    // 设置缓存区
    char buf[BUFFER] = {0};

    // 3.循环发送数据
    while (1)
    {
        recvfrom(udp_socket, buf, sizeof(buf), 0, NULL, NULL);
        int write_fb= write(fd_mp3, &buf, BUFFER);
         if (write_fb == -1)
            {
                fprintf(stderr, "read demo.mp3 error,errno:%d,%s\n", errno, strerror(errno));
                exit(1);
            }
        bzero(buf, sizeof(buf));
    }

    return 0;
}

服务器

/********************************************************************
 *
 * name  :  main    服务器
 * function :  使用udp网络协议从服务器发送音频文件到客户端
 * argument :
 *    @n  :argc
 *              @n  :argv
 * retval  :  none
 * author  :  [email protected]
 * date  :  2024年6月4日
 *  note  :
 *
 * *****************************************************************/

int main(int argc, char const *argv[])
{

    // 1.创建UDP套接字
    int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
    if (udp_socket == -1)
    {
        fprintf(stderr, "udp socket error,errno:%d,%s\n", errno, strerror(errno));
        exit(1);
    }

    // 2.需要先绑定主机的端口和地址
    struct sockaddr_in host_addr;
    host_addr.sin_family = AF_INET;                                     // 协议族,是固定的
    host_addr.sin_port = htons(atoi(argv[1]));                          // 目标端口,必须转换为网络字节序
    host_addr.sin_addr.s_addr = inet_addr(argv[2]);                     // 目标地址 "192.168.64.xxx"  已经转换为网络字节序
    bind(udp_socket, (struct sockaddr *)&host_addr, sizeof(host_addr)); // 绑定

    // 3.发送打开音频文件
    int fd_mp3 = open("./demo.mp3", "rb");
    if (fd_mp3 == -1)
    {
        fprintf(stderr, "open demo.mp3 error,errno:%d,%s\n", errno, strerror(errno));
        exit(1);
    }

    // 计算发送次数
    char buf[BUFFER] = {0};

    struct stat stat_buf;
    statstat("./demo.mp3", &stat_buf);
    int cnt = stat_buf.st_size / BUFFER;
    if (stat_buf.st_size % BUFFER)
    {
        cnt++;
    }

    // 3.循环发送数据
    while (1)
    {
        for (int i = 0; i < cnt; i++)
        {
            int read_fb = read(fd_mp3, &buf, BUFFER);
            if (read_fb == -1)
            {
                fprintf(stderr, "read demo.mp3 error,errno:%d,%s\n", errno, strerror(errno));
                exit(1);
            }
            sendto(udp_socket, buf, strlen(buf), 0, (struct sockaddr *)&host_addr, sizeof(host_addr));
            bzero(buf, sizeof(buf));
        }
    }

    return 0;
}

标签:文件,udp,addr,errno,传输,host,include,buf
From: https://www.cnblogs.com/ljw-boke/p/18233663

相关文章

  • 网络编程中UDP协议通信
    #include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<errno.h>#include<stdlib.h>#include<time.h>#include<string.h>#include<netinet/ip.h>#include<netinet/in.h>#include&......
  • python如何编译成exe文件
    python如何编译成exe文件?具体步骤如下:1、使用pycharm安装pyinstaller。2、找到pyinstaller的安装目录。C:\Users\lounious\PycharmProjects\untitled\venv\Scripts\pyinstaller-script.py注意在该目录的母目录下一般有我们的程序文件C:\Users\lounious\PycharmProject......
  • TCP和UDP
    TCP和UDPTCP的可靠性特性序列号(Sequencing):TCP为每个传输的数据段分配一个唯一的序列号,接收端可以根据这些序列号重新组装数据。确认与重传(AcknowledgmentandRetransmission):TCP使用确认机制来确认数据段是否成功到达。如果接收端没有收到某个数据段,发送端会重传它。流量控......
  • SpringBoot+Nginx大文件传输
    Nginx配置 #公众端的附件上传location/api/visitor/upload{#Passalteredrequestbodytothislocationupload_pass/api/outerPortal/uploadAndSave;#Storefilestothisdirectory#Thedirectory......
  • GD32F4xx+RT-Thread,SPI驱动、文件系统挂载应该怎么写
    在GD32F470芯片上使用RT-Thread操作系统,配合NORFlash(GD25Q256)编写SPI驱动、文件系统驱动以及挂载关联,可以按照以下步骤进行:1.SPI驱动编写首先需要编写SPI驱动来控制GD32F470与NORFlash之间的通信。这包括初始化SPI接口,配置SPI时钟、极性、相位等参数,并实现SPI传输函数。S......
  • 使用powershell脚本,自动压缩文件夹,实现备份功能
    担心数据丢失?教你3分钟实现自动压缩,备份文件夹。最近在使用obsidian,想要在多台电脑上访问一个同一个仓库,所以我把obsidian-vault设置在了mac-mini的共享文件夹上。但是有一个问题,mac-mini上边的硬盘是我的闲置硬盘,随时都可能挂掉。一、通过脚本自动备份为了避免obsidian......
  • 探索文件系统的世界:从基础概念到挂载机制
    引言在现代计算机系统中,文件系统是至关重要的一部分。它不仅负责数据的存储和管理,还为用户和应用程序提供了一种标准化的访问数据的方法。本文将深入探讨以下几个主题:为什么将磁盘抽象为块设备,为什么有了磁盘抽象还需要文件系统,文件系统如何作为虚拟磁盘,文件系统的分类,文件......
  • 如何将OnePlus手机上的文件轻松传输到Mac(3种简便方法)
    拥有一台OnePlus手机,意味着你拥有了一台性能强劲、功能丰富的Android设备。但当手机存储空间告急,或者你想要更好地管理和备份个人数据时,将文件传输到Mac电脑上无疑是一个明智的选择。本文将为你介绍三种简单有效的方法,帮助你轻松实现OnePlus到Mac的数据传输。方式一:使用Coolmu......
  • NFS,smb和数据库文件
    nfs的搭建网上有很多,可自行查看 WindowsServer2012R2搭建NFS服务器-知乎(zhihu.com)其中Windows10家庭版不支持NFS客户端,目前Windows上的协议是V3版本,防火墙上有NFS的选项,端口2049udp和tcp在客户端上的访问和smb一样,都可映射网络驱动器,使用\\ip\目录方式访问,可开机自动连......
  • 手动打包Apk文件以及Aab
    参考文档:https://developer.android.google.cn/studio/build/building-cmdline#bundletool-build工具:bundletool.jarapktool.jarandroid.jaraapt下载地址:bunletool:https://github.com/google/bundletool/releases apktool:https://bitbucket.org/iBotPeaches/a......