我正在用Python在ftp客户机和ftp服务器之间构建一个代理。所有的控制阶段和数据阶段都做得很好(目前处于活动状态),但是当我发送请求(例如列表)时,服务器不会将信息发回。我不知道是什么导致了这个错误..。
下面是Wireshark的捕获信息:
以及相应的代码:
print(f"Waiting for a message from the server to the PORT message")
answer = fw_proxy_server.recv(BUFFER_FTP)
print(answer) # 200 PORT command successful
我必须编写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(
使用我编写的FTP客户端,我有时会在上传完成后收到来自FileZilla服务器的226 Transfer OK消息,而有时我永远不会收到任何东西。这并不是因为客户端在收到226 Transfer OK之前断开了连接,因为我可以在服务器上看到FileZilla从未发送过它。
我需要知道服务器何时接收到完整的上载,因为在关闭连接之前,我不知道整个文件是否已经到达网络。
有什么可能导致226 Transfer OK消息不可靠的原因吗?究竟是什么触发了它的发送?
我有一个ftp客户端服务器程序,目前使用TCP.现在我需要让它使用UDP,所以使用数据报套接字。
他们的工作方式是创建一个ServerSocket,它将侦听一个连接,然后将该连接提供给一个Socket,并为该套接字启动一个单独的线程。
但是现在使用DatagramSocket时,没有等效的DatagramServerSocket,所以我不知道如何再给客户机提供单独的套接字了。是否有用于数据报的服务器套接字?
import java.io.IOException;
import java.net.*;
public class Server {
public static void