C中通过套接字发送文件

2024-02-23

我在学校接到一个任务,用C语言(针对Linux)编写一个FTP程序。我很快就可以使用所有基本功能(ls,cd),但是我在文件传输部分遇到了麻烦。我使用 sendfile 通过套接字发送文件,如下所示:

int fd = open(temp, O_RDONLY);  
int rc = sendfile (client_fd, fd, &offset, statbuf.st_size);

我似乎不知道如何在客户端接收这个文件。我尝试这样进行调试:

while( (i = read(sock, message, MSG_LEN - 1)) > 0 ) {

    message[i] = '\0';
    printf("%s", message);
}

这在打印文本文件方面做得很好,但例如,如果我尝试发送二进制文件,它只会打印出二进制文件的开头并挂在 read() 部分(因为没有任何来自服务器的信息,我思考)。

我很感激任何建议!


发送文件后需要关闭套接字的写入端,以便接收方知道已到达文件末尾:

shutdown(client_fd, SHUT_WR);

(shutdown()被用来代替close(),以便了解对方是否成功收到整个文件)。

然后您的阅读端将看到文件结尾(read()返回 0),此时应该close()它的插座末端。然后服务器将看到文件结尾,并且它也可以关闭其套接字(并记录成功的传输)。

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

C中通过套接字发送文件 的相关文章

随机推荐

  • 如何更改 Mac 上的 JAR 图标?

    我的 Mac 上有一个名为 Test jar 的 JAR 文件 当我单击它时 该文件运行得非常好 它所做的只是打开一个小窗口 并显示 Test 所以它是一个简单的应用程序 我是 Java 编程新手 我的问题是如何将 jar 文件的图标更改为
  • C# 二进制常量表示

    我真的被这个难住了 在C 中 有如下的十六进制常量表示格式 int a 0xAF2323F5 有二进制常量表示格式吗 不 C 中没有二进制文字 您当然可以使用 Convert ToInt32 解析二进制格式的字符串 但我认为这不是一个很好的
  • 如何在 Python 中将*所有*字符转义为相应的 html 实体名称和数字?

    我想将字符串编码为其相应的 html 实体 但不幸的是我无法做到 正如我在问题标题中所说 我想要all字符串中的字符将被转换为相应的 html 实体 数字和名称 所以根据文档 https docs python org 3 library
  • 如何在 firestore 文档 ID 的位置添加用户 UID

    我正在尝试获取用户 UID 来代替 Firebase Firestore 中自动生成的文档 ID 但由于此错误而无法获取它 类型错误 firebase auth currentUser 为 null 这是我的 index js 文件 Fir
  • Python请求访问OAUTH网站内容 - SNL财经

    我一直在用头撞墙 试图从新闻来源 SNL 财经 检索内容 我拥有有效的凭据 因此理论上我应该能够以编程方式访问他们的新闻内容 简而言之 我尝试执行以下脚本但没有成功 s requests Session client id client s
  • 谷歌地图 API v3 的服务器端集群

    我目前正在开发一种谷歌地图概述小部件 它将位置显示为地图上的标记 标记的数量从数百个到数千个 10000 个以上 不等 现在我正在使用谷歌地图的 MarkerClusterer v3 1 0和谷歌地图 javascript api v3 高
  • 如何给JTextField添加背景图片?

    我知道如何向 JPanel 添加背景图像 创建扩展 JPanel 的 ImagePanel 类并重载它的 PaintComponent 方法 但是 JTextField 的这个技巧无法正常工作 显示图像 但不显示文本 那么 如何正确地向 J
  • Multiprocessing.pool 具有多个 args 和 kwargs 的函数

    我想使用 mutliprocessing pool 方法并行计算 问题是我想在计算中使用的函数提供了两个参数和可选的 kwargs 第一个参数是数据帧 第二个参数是 str 任何 kwargs 是字典 对于我尝试执行的所有计算 我想要使用的
  • 如何在 swift 中导入 JSQMessagesViewController?

    我正在使用 xcode 6 3 swift 1 2 并使用 cocoapods 安装 JSQMessagesViewController 库 这是我的 pod 文件 pod JSQMessagesViewController 和我的桥接文件
  • HttpListener:请求的地址在此上下文中无效

    当创建一个HttpListener对象使用 var server new HttpListener server Prefixes Add http 8080 server Start 一切正常 但是 当我使用 var server new
  • 对齐 2 个矩阵以实现最大重叠

    那么下面是一道面试题 Given two N2 matrices with entries being 0 or 1 How can we find out the number of maximum overlapping 1 s pos
  • 用户因“记住我”而注销

    我似乎无法理解 Identity 2 0 和 cookies 的工作方式 ASP NET MVC 5 我想要的是 如果用户登录并选中 记住我 复选框 我不希望他永远退出 但是发生的情况是 用户在一定时间跨度后退出 如果用户在时间跨度之前关闭
  • 致命错误:未捕获的 CurlException:26:创建表单数据失败抛出

    我收到以下错误 Fatal error Uncaught CurlException 26 failed creating formpost data thrown in home u801961841 public html inc li
  • JQuery 可排序列表和固定/锁定项目

    是否可以锁定 JQuery 可排序列表中的列表项 使这些项保留在列表中的特定位置 例如 考虑这个带有锁定项目的伪列表 item A item B locked item C locked item D item E item F item
  • 是否可以在 PlantUML 中对参与者进行分组?

    我想要一个围绕几个参与者的盒子 表明他们是一个实体的一部分 如何在 PlantUML 中做到这一点 您可以将参与者 装箱 如 plantuml 网站上所示 摘录如下 startuml box Internal Service LightBl
  • 无法使用 VS 2010 启动 SOS.dll

    我正在尝试启动SOS dll from Visual Studio 2010 旗舰版 我收到以下错误 命令期间出错 IDebugClient 要求未实现的接口 命令期间出错 异常 c0000005 发生在 1BC4EF9E 我还为该项目启用
  • 我在 IE 中遇到语法错误,但在 Chrome 中却没有

    所以我有这段代码 一个函数 可以在 Google Chrome Fire Fox 中运行 但不能在 IE 中运行 如果我评论这一行 一切都会运行良好 除了该行至关重要 我有一个名为 ReadCookie 的函数 它基本上只是将 cookie
  • jqgrid:拖放多行

    如何使用 jqgrid 拖放多行 即我可以拖动多于一行吗 我怎么知道这在 jqGrid 中是不可能的 jQuery UI 的可排序功能是否支持它 请参阅http jqueryui com demos sortable http jquery
  • Html:

    标记的正确顺序是什么?

    根据标准 以下哪一项 如果有的话 是正确的 a href p Link Description p a p a href Link Description a p 我知道它们的功能相同 但这是一个最佳实践 标准问题 这也适用于 ul ol
  • C中通过套接字发送文件

    我在学校接到一个任务 用C语言 针对Linux 编写一个FTP程序 我很快就可以使用所有基本功能 ls cd 但是我在文件传输部分遇到了麻烦 我使用 sendfile 通过套接字发送文件 如下所示 int fd open temp O RD