Linux 下 C语言编写 TCP/IP文件传输

2023-11-08

一、概述

        文件传输,分为文件名字和文件内容。

        传递文件名后,等待另外一端创建相应的文件并回复,然后在开始传输文件内容。

        以下程序还设计到目录的查询。

二、目录的查询

        主要头文件

#include <dirent.h>

        主要函数

//获取当前目录的名字,并以字符串的形式保存在DirBuf里面
getcwd(DirBuf , sizeof(DirBuf))

//打开当前目录,并且用dir指针指向当前目录的信息
DIR *dir;
dir = opendir(DirBuf);

//依次获取当前目录的文件信息,并且用一个结构体指针指向返回的数据
struct dirent *dirinfo;
dirinfo = readdir(dir)//当读取完整个文件夹之后,会返回NULL

三、文件传输

        因为文件传输很类似,所以这里就只演示客户端从服务器下载文件的程序代码

        客户端会先发送要下载的文件的文件名字给服务器,服务器会根据名字打开文件。打开成功之后会给客户端发送确认信息。这时候就开始文件的传输

3.1客户端代码

        在服务器端一行一行的传输给客户端,在客户端用fputs来写入文件


/**
 * @brief 下载文件
 * 
 * @param acceptfd 
 * @param msg 
 * @return int 
 */
int do_downLoad(int acceptfd , MSG *msg)
{
    /*
        1、在本地创建文件
        2、发送要下载的文件名给服务器
        3、接收内容
    */
   FILE *fp = NULL;
   printf("in downLoad.\n");
   msg->type = D;

   fp = fopen(msg->filename,"w");
   if(fp == NULL)
   {
        printf("fail to create file.\n");
        return -1;
   }

    /*发送文件名字*/
    if(send(acceptfd , msg, sizeof(MSG) , 0) < 0)
    {
        perror("send");
        exit(0);
    }

    /*等待服务器确认有此文件*/
    if(recv(acceptfd , msg , sizeof(MSG) , 0) < 0)
    {
        perror("recv");
        exit(0);
    }

    if(strncmp(msg->filename , EXIST , strlen(EXIST) - 1) != 0)
    {
        printf("file not exist.\n");
        fclose(fp);
        return -1;
    }

    /*写入内容*/
    while(recv(acceptfd , msg , sizeof(MSG) , 0) > 0)
    {
        if(msg->filecontent[0] == '\0')
        {
            break;
        }
        printf("%s" , msg->filecontent);
        fputs(msg->filecontent , fp);
    }

    /*关闭文件*/
    fclose(fp);
    return 0;
}

3.2服务器端代码

        用fopen函数打开文件,然后使用fgets一行一行的读取文件内容,如果读到了文件末尾,fgets会返回一个NULL


/**
 * @brief 发送文件到客户端
 * 
 * @param acceptfd 
 * @param msg 
 * @return int 
 */
int do_download(int acceptfd ,MSG *msg)
{
    /*
        1、打开客户端要下载的文件
        2、如果打开文件失败了就返回“fail”
        3、如果成功就就开始传输
        4、发送完毕之后就要发送一个空字符
    */
    FILE *fp = NULL;
    printf("in download.\n");
    if((fp = fopen(msg->filename , "r")) == NULL)//用读模式打开文件
    {
        /*打开文件失败*/
        printf("open file fail.\n");
        strcpy(msg->filecontent , "fail");
        send(acceptfd , msg , sizeof(MSG) , 0);
        return -1;
    }

    strcpy(msg->filename, EXIST); 
    if(send(acceptfd , msg , sizeof(MSG) , 0) < 0)
    {
        perror("send");
        return -1;
    }

    /*fgets 读到了文件末尾,会返回NULL*/
    while(fgets(msg->filecontent , 512 , fp) != NULL)
    {
        printf("%s" , msg->filecontent);
        send(acceptfd , msg , sizeof(MSG) , 0);
    }

    /*发送一个空字符代表结束*/
    msg->filecontent[0] = '\0';
    if(send(acceptfd , msg , sizeof(MSG) , 0) < 0)
    {
        perror("send");
        return -1;
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 下 C语言编写 TCP/IP文件传输 的相关文章

  • Kali Linux 安全渗透核心总结,444页核心知识点

    就像IT人离不开Linux系统一样 网安人也离不开Kali Linux 作为攻击性防御和渗透测试的代名词 越来越多的人开始学习Kali 如果你也对kali感兴趣 又想深入了解这方面内容 不妨收藏一下这份Kali Linux安全渗透教程 共4
  • 第二节课内容学习

    监听远程端口 并映射到本地 先配置ssh的公私钥非对称加密 假设远程开放的端口为33090 在本地计算机终端执行 ssh CNg L 6006 127 0 0 1 6006 root ssh intern ai org cn p 33090
  • 广告竞价策略:激发广告变现潜能的关键

    在数字化时代 广告已经成为企业推广品牌 产品和服务的关键手段之一 为了最大程度地发挥广告的效果 广告竞价策略成为广告主和数字营销专业人士关注的焦点 通过巧妙运用竞价策略 广告主可以在激烈的市场竞争中脱颖而出 实现广告变现的潜能 admaoy
  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • 服务器超线程的好处

    服务器超线程的好处 1 提高性能 超线程通过提高整体系统吞吐量显着提高服务器性能 通过允许多个线程在单个物理内核上同时执行 超线程减少了空闲时间并最大限度地利用了可用资源 这会加快任务执行速度并缩短应用程序的响应时间 尤其是在多线程工作负载
  • 改善python程序的91建议记录

    使用else子句简化循环 异常处理 案例1 执行sql异常时处理 def save db obj try save attr1 db execute a sql stmt obj attr1 save attr2 db execute an
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • Linux 软件安装以及管理

    本篇主要记录常用的软件安装和管理方式 主要是 yum rpm dnf apt pip 大致都是一样的 主要是部分软件提供了解决依赖的功能 内容不包括源码安装 源码安装情况相对比较复杂 后续有时间再补充 约定 案例所用模板软件均为 pytho
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • Web 安全漏洞之 OS 命令注入

    什么是 OS 命令注入 上周我们分享了一篇 Web 安全漏洞之 SQL 注入 其原理简单来说就是因为 SQL 是一种结构化字符串语言 攻击者利用可以随意构造语句的漏洞构造了开发者意料之外的语句 而今天要讲的 OS 命令注入其实原理和 SQL
  • 5个步骤,教你瞬间明白线程和线程安全

    记得今年3月份刚来杭州面试的时候 有一家公司的技术总监问了我这样一个问题 你来说说有哪些线程安全的类 我心里一想 这我早都背好了 稀里哗啦说了一大堆 他又接着问 那你再来说说什么是线程安全 然后我就GG了 说真的 我们整天说线程安全 但是对
  • messages,CentOS 7不收集日志或不存在 /var/log/messages

    var log message var log secure等都不记录了 并且都是空文件 重启机器 reboot 无效 重启日志 systemctl start rsyslog 无效 怀疑空间不足 删除 var log messages 重
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求 链接建立后 客户端和服务器端就可以通过TCP链接直接交互数据 WebSocket链接后可以通过 send 方法来向服务器发送数据 并通过 onn
  • 国外拨号VPS指南:开启你的全球网络之旅

    在当今数字化时代 互联网已经成为了我们生活的一部分 而要在全球范围内畅通无阻地访问互联网 拥有一个可靠的国外拨号VPS是非常重要的 无论您是为了工作 学习还是娱乐 国外拨号VPS都可以为您提供更广泛的网络体验 本文将为您提供国外拨号VPS的
  • Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

    场景 Mysql中怎样设置指定ip远程访问连接 Mysql中怎样设置指定ip远程访问连接 navicat for mysql 设置只有某个ip可以远程链接 CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式 如果通过可视
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告

随机推荐

  • xxx.app已损坏,打不开。 您应该将它移到废纸篓。

    Mac最新的系统打开网上下载的应用程序时 会提示 xxx app已损坏 打不开 您应该将它移到废纸篓 解决方式 1 系统偏好设置 gt 安全性与隐私 gt 修改为任何来源 2 serria里面没有 任何来源 这一项 需要打开终端执行sudo
  • 【数据结构】 二叉树面试题讲解->贰

    文章目录 引言 二叉树遍历 https www nowcoder com practice 4b91205483694f449f94c179883c1fef tpId 60 tqId 29483 rp 1 ru activity oj qr
  • 关于链表的三个常用算法

    找到环的第一个入口点 static public SinglyLinkedListNode
  • (s2-048)Struts2 反序列化漏洞

    Struts2 Struts2是一个基于MVC设计模式 java 的Web应用框架 它本质上相当于一个servlet 在MVC设计模式中 Struts2作为控制器 Controller 来建立模型与视图的数据交互 Struts2 是 Apa
  • 【故障处理】java程序cpu飙高如何排查

    使用传统jstack手法来排查 如何使用原生top命令 jstack命令来做定位具体代码的位置处理 简单步骤有下面几步 执行top命令 查看CPU占用情况 找到进程的pid 12002 使用 top Hp
  • Win10增加右键以管理员方式打开cmd,可自定义右键文本图标。

    先上设置后效果 设置步骤 1 打开注册表找到表项 按 win r 输入 regedit 打开注册表 找到注册表项 HKEY CLASSES ROOT Directory Background shell 2 在shell上新建项 右键 sh
  • word显示修改痕迹

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 打开待修改的word 2 设置修订 审阅 修订 修订 3 显示修改痕迹 添加修改内容
  • Fisco Bcos学习(环境搭建)

    服务器搭建联盟链过程 一 docker方式部署单群组4节点区块链 1 安装依赖 1 安装curl openssl yum install y curl openssl openssl devel 2 下载安装脚本 curl LO https
  • 完美解决 vcpkg 下载速度慢

    vcpkg 下载慢非常令人头痛 下面是一位 github 用户的抱怨 非常真实 The download and compilation time of vcpkg is relatively long So during this wai
  • 人才画像--持续更新

    人力资源管理包括人力资源规划 招聘与配置 培训与开发 绩效管理 薪酬管理及员工关系 六大模块 六大模块之间相辅相成 相互联系 对解决企业人才的 留 选 育 用 问题具有极为关键的作用 大数据时代的到来 为其注入了新能量 有人认为 大数据将成
  • 【面试题】2、Docker和Spring相关

    1 Docker是什么 1 Docker是一个快速交互 运行应用的技术 可以将程序及其依赖 运行环境一起打包为一个镜像 该镜像可以迁移到任意的Linux操作系统 2 运行时利用沙箱机制形成隔离容器 各个应用之间互不干扰 3 移动和移除程序都
  • Oracle的三种高可用集群方案

    转载自 http www cnblogs com baiboy p orc2 html label1 Oracle的三种高可用集群方案 1 RAC Real Application Clusters 多个Oracle服务器组成一个共享的Ca
  • matlab 奇异值分解

    1 奇异值分解 关于matlab中的diag函数 矩阵对角元素的提取和创建对角阵
  • CPT104 习题笔记

    调度算法 时间 突发时间 Burst time 通常 我们忽略I O时间 只考虑进程的CPU时间 因此 突发时间是进程在CPU上执行所花费的总时间 Arrival Time 到达时间是流程进入就绪状态并为其执行做好准备的时间 Exit ti
  • Spring属性占位符PropertyPlaceholderConfigurer的使用

    Spring属性占位符PropertyPlaceholderConfigurer的使用 1 一个简单的Demo 1 1 创建conf xml
  • git clone remote: HTTP Basic: Access denied问题解决

    今天用git下载项目 突然提示 查阅资料才发现是因为最近更改gitlab密码的缘故 进入控制面板如下目录 修改对应的git普通凭据 问题解决
  • 华为这么容易进吗?轻轻松松拿到25K的offer...

    美本计算机专业 代码能力一般 之前有过两段实习以及一个学校项目经历 本人面试的是测试开发岗 期间经历了笔试 gt 性格测试 gt 技术一面 gt 技术二面 gt 总监面 gt OC这几个环节 基本上每周完成一个环节 由于华为面试环节全部完成
  • 实战分享:I2C总线详解

    大家好 我是阿荣 感恩遇见 本文部分图文来源于网络 并经过整合 编辑和勘误 实战分享栏目将重点介绍嵌入式的基础知识 并融合一些实战经验 持续勘误和迭代 建议关注和收藏 WX同名 I2C总线是一种常用的通信接口 让我们先来看看百度百科对它的定
  • 微信小程序 - 暗黑模式(深色模式)

    最近暗黑模式成为了潮流 微信小程序也推出了暗黑模式适配 下面来记录一个下适配暗黑模式 效果图 一 实现 1 开启暗黑模式 在 app json 中配置 darkmode true app json darkmode true 2 配置主题文
  • Linux 下 C语言编写 TCP/IP文件传输

    一 概述 文件传输 分为文件名字和文件内容 传递文件名后 等待另外一端创建相应的文件并回复 然后在开始传输文件内容 以下程序还设计到目录的查询 二 目录的查询 主要头文件 include