FTP 服务器无法正确处理'rn'
FTP server does not handle ' ' correctly
我想请你们提供建议。我想用 C/C++ 编写 FTP 客户端,我不想使用一些已经编写好的库,所以我决定自己编写。但我现在面临着一个小问题。
在服务器上发送任何数据期间,一切都正常,文件被创建并填充数据,但是服务器完全忽略了"\r"和""符号。例如,我发送一些包含许多行的文本文件,但是服务器将其连接到一条线。
我已经尝试了很多,但我不知道问题可能在哪里。我已经尝试将文件从我的客户端发送到我的临时服务器(仅限 recv() 函数),并且文件正确保存。所以我不知道为什么FTP服务器有问题。
(我在Winsock 2中做所有事情)
这是从我的客户端发送文件的函数:
int PutFile(char *filename)
{
fstream stream;
stream.open(filename, ios::in | ios::binary);
if(!stream.is_open())
{
Print("FTP_COMMAND[info]( %d ): Could not open file!", __LINE__);
return -1;
}
int sizeoffile = 0;
int filepos = 0;
stream.seekg(0, ios::end);
sizeoffile = stream.tellg();
stream.seekg(0, ios::beg);
if(sizeoffile <= 0)
{
Print("FTP_COMMAND[in]( %d ): Invalid file!", __LINE__);
return -1;
}
char *file = new char[sizeoffile + 1];
memset(file, 0, sizeoffile + 1);
stream.read(file, sizeoffile);
char _filename[512];
memset(_filename, 0, 512);
char *ptr = 0;
if((ptr = strrchr(filename, '/')) > 0 || (ptr = strrchr(filename, '' ) ) > 0 )
{
memcpy(_filename, (ptr + 1), strlen((ptr + 1)));
}
else
{
memcpy(_filename, filename, strlen(filename));
}
Pasv();
TransferType(ASCII);
SendCommand("STOR", _filename);
memset(ftpcommand_b, 0, 1500);
if(recv(ftpcommand, ftpcommand_b, 1500, 0) == SOCKET_ERROR)
{
closesocket(ftpcommand);
return -1;
}
Print("FTP_COMMAND[in]( %d ): %s", __LINE__, ftpcommand_b);
int maxtime = 3000;
setsockopt(ftpdata, SOL_SOCKET, SO_RCVTIMEO, (char*)maxtime, sizeof(int));
while(filepos != sizeoffile)
{
int ssize = sizeoffile - filepos < 1500 ? sizeoffile - filepos : 1500;
Print("FTP_DATA[in]( %d ): Data size: %d", __LINE__, ssize);
if(send(ftpdata, &file[filepos], ssize, 0) == SOCKET_ERROR)
{
Print("FTP_DATA[in]( %d ): Failed to send data!", __LINE__);
closesocket(ftpdata);
return -1;
}
filepos += ssize;
}
closesocket(ftpdata);
memset(ftpcommand_b, 0, 1500);
if(recv(ftpcommand, ftpcommand_b, 1500, 0) == SOCKET_ERROR)
{
closesocket(ftpcommand);
return -1;
}
Print("FTP_COMMAND[in]( %d ): %s ssize: %d", __LINE__, ftpcommand_b, filepos);
stream.close();
return 0;
}
用于接收数据的函数就像一个魅力,但发送数据不是那么多。我知道我的代码并不完美,但我只是想了解FTP是如何工作的。我当然要编辑我的代码:)
提前谢谢你!
我想出了问题所在。
问题不在于发送数据,而在于接收数据。在 GetFile 函数中,我将 TransferType 设置为二进制,而不是发送数据时的 ASCII,因此问题:)
解决了无论如何,谢谢你们的帮助! :)
相关文章:
- FTP服务器试图登录时奇怪的响应
- 连接到 FTP 服务器并访问文件
- 如何在不保存文件的情况下制作打印屏幕并将其发送到FTP服务器?我的工作代码将文件保存到HDD
- 在 FTP 服务器中正确实现 LIST 命令
- Internet Connect无法通过FTP代理连接到FTP服务器
- C 服务器 - 客户lient FTP仿真
- FTP服务器端口处于主动模式和被动模式
- 使用Libcurl从FTP服务器下载多个文件
- C++:如何使用libcurl检查FTP服务器上是否存在目录
- 判断文件是否为FTP服务器上的目录
- 动态分配内存以接收FTP服务器的LIST响应时的SIGSEGV
- 创建虚假 ftp 服务器的程序
- 如何避免 QNetwork请求将 RHELP 动词发送到 FTP 服务器
- FTP 服务器无法正确处理'rn'
- QNetworkAccessManager上载到本地FTP服务器
- 用于RPi2的UWP FTP服务器
- 如何在ftp服务器/客户端将数据发送到TCP套接字之前从其获取数据
- 如何获得ftp服务器中所有文件和文件夹的列表(c++)
- 终止ftp服务器上的数据传输时的客户端行为
- 为FTP服务器制作文件-当头文件被修改时编译