找回密码
 立即注册
首页 资源区 代码 用udp协议传输文件

用udp协议传输文件

姊囝 2025-6-4 18:08:08
用udp协议传输文件


目录

  • 用udp协议传输文件

    • 头文件/宏定义
    • 客户端
    • 服务器


头文件/宏定义
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include
  5. #include <netinet/in.h>
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <time.h>
  9. #include <pthread.h>
  10. #include <netinet/tcp.h>
  11. #include <unistd.h>
  12. #include <strings.h>
  13. #include <errno.h>
  14. #include <sys/stat.h>
  15. #include <fcntl.h>
  16. // 缓存区大小
  17. #define BUFFER 512
复制代码
客户端
  1. /********************************************************************
  2. *
  3. * name  :  main    客户端
  4. * function :  使用udp网络协议从服务器发送音频文件到客户端
  5. * argument :
  6. *    @n  :arg
  7. *
  8. * retval  :  none
  9. * author  :  17647576169@163.com
  10. * date  :  2024年6月4日
  11. *  note  :
  12. *
  13. * *****************************************************************/
  14. int main(int argc, char const *argv[])
  15. {
  16.     // 1.创建UDP套接字
  17.     int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
  18.     if (udp_socket == -1)
  19.     {
  20.         fprintf(stderr, "udp socket error,errno:%d,%s\n", errno, strerror(errno));
  21.         exit(1);
  22.     }
  23.     // 2.需要先绑定主机的端口和地址
  24.     struct sockaddr_in host_addr;
  25.     host_addr.sin_family = AF_INET;                                     // 协议族,是固定的
  26.     host_addr.sin_port = htons(atoi(argv[1]));                          // 目标端口,必须转换为网络字节序
  27.     host_addr.sin_addr.s_addr = inet_addr(argv[2]);                     // 目标地址 "192.168.64.xxx"  已经转换为网络字节序
  28.     bind(udp_socket, (struct sockaddr *)&host_addr, sizeof(host_addr)); // 绑定
  29.     // 3.创建接收文件
  30.     int fd_mp3 = open("./my.mp3", "wb");
  31.     if (fd_mp3 == -1)
  32.     {
  33.         fprintf(stderr, "open my.mp3 error,errno:%d,%s\n", errno, strerror(errno));
  34.         exit(1);
  35.     }
  36.     // 设置缓存区
  37.     char buf[BUFFER] = {0};
  38.     // 3.循环发送数据
  39.     while (1)
  40.     {
  41.         recvfrom(udp_socket, buf, sizeof(buf), 0, NULL, NULL);
  42.         int write_fb= write(fd_mp3, &buf, BUFFER);
  43.          if (write_fb == -1)
  44.             {
  45.                 fprintf(stderr, "read demo.mp3 error,errno:%d,%s\n", errno, strerror(errno));
  46.                 exit(1);
  47.             }
  48.         bzero(buf, sizeof(buf));
  49.     }
  50.     return 0;
  51. }
复制代码
服务器
  1. /********************************************************************
  2. *
  3. * name  :  main    服务器
  4. * function :  使用udp网络协议从服务器发送音频文件到客户端
  5. * argument :
  6. *    @n  :argc
  7. *              @n  :argv
  8. * retval  :  none
  9. * author  :  17647576169@163.com
  10. * date  :  2024年6月4日
  11. *  note  :
  12. *
  13. * *****************************************************************/
  14. int main(int argc, char const *argv[])
  15. {
  16.     // 1.创建UDP套接字
  17.     int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
  18.     if (udp_socket == -1)
  19.     {
  20.         fprintf(stderr, "udp socket error,errno:%d,%s\n", errno, strerror(errno));
  21.         exit(1);
  22.     }
  23.     // 2.需要先绑定主机的端口和地址
  24.     struct sockaddr_in host_addr;
  25.     host_addr.sin_family = AF_INET;                                     // 协议族,是固定的
  26.     host_addr.sin_port = htons(atoi(argv[1]));                          // 目标端口,必须转换为网络字节序
  27.     host_addr.sin_addr.s_addr = inet_addr(argv[2]);                     // 目标地址 "192.168.64.xxx"  已经转换为网络字节序
  28.     bind(udp_socket, (struct sockaddr *)&host_addr, sizeof(host_addr)); // 绑定
  29.     // 3.发送打开音频文件
  30.     int fd_mp3 = open("./demo.mp3", "rb");
  31.     if (fd_mp3 == -1)
  32.     {
  33.         fprintf(stderr, "open demo.mp3 error,errno:%d,%s\n", errno, strerror(errno));
  34.         exit(1);
  35.     }
  36.     // 计算发送次数
  37.     char buf[BUFFER] = {0};
  38.     struct stat stat_buf;
  39.     statstat("./demo.mp3", &stat_buf);
  40.     int cnt = stat_buf.st_size / BUFFER;
  41.     if (stat_buf.st_size % BUFFER)
  42.     {
  43.         cnt++;
  44.     }
  45.     // 3.循环发送数据
  46.     while (1)
  47.     {
  48.         for (int i = 0; i < cnt; i++)
  49.         {
  50.             int read_fb = read(fd_mp3, &buf, BUFFER);
  51.             if (read_fb == -1)
  52.             {
  53.                 fprintf(stderr, "read demo.mp3 error,errno:%d,%s\n", errno, strerror(errno));
  54.                 exit(1);
  55.             }
  56.             sendto(udp_socket, buf, strlen(buf), 0, (struct sockaddr *)&host_addr, sizeof(host_addr));
  57.             bzero(buf, sizeof(buf));
  58.         }
  59.     }
  60.     return 0;
  61. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册