- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个简单的 FTP 客户端,但不知何故无法建立 FTP 连接。
我使用了以下代码:
import socket
sock = socket.socket()
sock.connect(('localhost', 21))
data = 'USER adm\r\n'.encode()
sock.send(data)
print('Close')
sock.close()
(048507)01.05.2018 06:00:03 - (not logged in) (127.0.0.1)> Connected on port 21, sending welcome message...
(048507)01.05.2018 06:00:03 - (not logged in) (127.0.0.1)> 220-FileZilla Server 0.9.60 beta
(048507)01.05.2018 06:00:03 - (not logged in) (127.0.0.1)> 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
(048507)01.05.2018 06:00:03 - (not logged in) (127.0.0.1)> 220 Please visit https://filezilla-project.org/
(048507)01.05.2018 06:00:03 - (not logged in) (127.0.0.1)> disconnected.
USER adm
命令,但在日志中找不到它。如何使用套接字建立与 FTP 服务器的成功连接?
最佳答案
有几个可能的时间问题。
FTP 是一种“服务器先说话”的协议(protocol)。您在日志中看到的 220 横幅是由服务器在接受连接后立即发送的。客户端应该在发送任何命令之前阅读该横幅。 (如果你得到任何不是 220 的数字代码,服务器就不愿意说话。)
出于测试目的,我建议您从服务器读取并将您读取的任何内容打印到标准输出。您的服务器的 220 横幅是多行 FTP 响应的示例,其中数字代码后跟第一行的连字符,最后一行是空格。您应该继续阅读,直到在数字代码后出现一行空格。
如果您不这样做,只需发送 USER
连接完成后,您会立即说话。根据您的客户端代码运行的速度,服务器可能会在预期命令之前收到命令,这可以解释为什么它没有响应。
另一个可能的问题是您在发送 USER
后立即关闭连接。 ,无需等待响应。服务器也可能会注意到这一点。即使它没有尝试检测奇怪的客户端行为,它也可能在尝试发送响应时收到写入错误,这可以解释为什么它没有正常记录。
伪代码中 FTP 客户端的整体结构是
connect
read response (banner)
while not done:
send command
read response
send QUIT
read response
close
USER
的测试,您至少需要:
connect
read banner
send USER
read response
close
QUIT
可能不会造成任何伤害)
USER
,因此您应该始终检查数字代码后的空格。编写一个子程序来读取单个 FTP 响应并在每个命令之后调用它是一个好主意。
关于python-3.x - 如何使用套接字连接到 FTP 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50117522/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!