python - 如何将 tcp 套接字与 ftp 服务器连接
问题描述
我在地址ftp://192.168.1.14/
和端口上有一个 FTP 服务器21
。我想用 Python 制作一个程序来连接它并下载它的文件。这是我的作业,我必须使用TCP
. 我的问题陈述是
“你需要使用基于python的TCP协议实现一个简单的FTP操作。你必须创建一个FTP服务器和客户端。然后你必须创建一个TCP套接字(SOC_SREAM)并在服务器和客户端模块之间建立连接您创建(编程)。一旦建立连接,您需要将文件(存储在服务器目录中的文本文件)传输到客户端目录。”
我能够做到这一点,ftplib
但现在我想用简单的套接字 tcp 做到这一点。到目前为止我所做的是
import socket
s = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
s.bind(('ftp://192.168.1.14/', 21))
#also tried s.bind((socket.gethostname(), 21))
但我收到错误是
Traceback (most recent call last):
File "server.py", line 34, in <module>
s.bind(('ftp://192.168.1.14/', 21))
socket.gaierror: [Errno 11001] getaddrinfo failed
希望你能帮助我。谢谢
编辑:
使用时s.bind((socket.gethostname(),21))
错误信息是
Traceback (most recent call last):
File "server.py", line 34, in <module>
s.bind((socket.gethostname(), 21))
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
解决方案
我解决了这个问题。由于我想连接到现有的IP地址,所以它的方法connect
不是bind
。所以正确的代码是
import socket
s = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
s.connect((socket.gethostname(), 21))
print(s)
推荐阅读
- javascript - 升级到 3.1 版本后 NokiaHere 地图渲染问题
- windows - 不同 Windows 版本的默认执行策略是什么?
- laravel - 我如何将 Laravel 的 Bootstrap 4 降级到 3.3.7
- batch-file - 如何批量对齐列中的文本
- javascript - 子组件的 setState 仅在被调用时
- notepad++ - 按第二个值对文本文件进行排序
- vue.js - bootstrap-vue 项目中面包屑的项目
- javascript - 将数组对象转换为对象javascript
- jenkins - Jenkins 多分支管道:脚本/jenkinsfile 作为 svn 外部
- java - 为什么 JpaRepository 在保存实体时尝试为空 FK 键创建实体?