c - 如何通过套接字发送/接收二进制数据?

标签 c linux ftp encode ftp-server

我必须编写一个 FTP 服务器代码,但我对如何传输数据有疑问。

我在 Linux 上使用 ftp 命令对其进行测试,目前我正在处理 LIST,它会发送工作目录中的文件/目录列表。一切正常(ftp 打印文件列表)除了 ftp 打印以下警告:

WARNING! 5 bare linefeeds received in ASCII mode
File may not have transferred correctly.

我想删除该警告,我认为 ftp 需要二进制数据,但我不知道如何通过套接字发送这样的数据,我目前正在做最基本的方法发送 ls 结果:

dup2(dst_channel, 1);
execlp("ls", "ls", "-l", NULL);

最佳答案

FTP 协议(protocol)指定 LIST 命令应以 NETASCII 格式发送其结果,这意味着换行符表示为 CRLF。但是标准的 Linux 程序只输出换行符的 LF。

您需要运行 ls 命令并将其输出连接到管道。您的服务器从管道中读取,将任何 \n 字符替换为“\r\n”,并将其写入套接字。

除非客户端请求二进制模式,否则在传输实际文件时您需要做类似的事情。

关于c - 如何通过套接字发送/接收二进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912563/

相关文章:

C - 为什么我的缓冲区打印不正确?

c++ - 如何从十六进制值缓冲区渲染矩形 SDL2 纹理?

linux 上的 php apache

PHP:ftp_connect - 获取任何错误详细信息

azure - Windows Azure 预览版的新功能

c - 写入和读取文件的问题

c - 从偏移处的文件描述符读取/写入

linux - UDP 吞吐量 : Decreasing InterruptThrottleRate in ethernet adapter e1000e.

python - 如何从 bash 脚本访问 python 返回值

javascript - JavaScript 能否获取文件上传到 FTP 服务器的日期?