如何将TCP套接字与ftp服务器连接

时间:2020-08-09 13:10:42

标签: python sockets ftp

我在地址ftp://192.168.1.14/和端口21上有一个FTP服务器。我想用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

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。由于我想连接到现有的IP地址,因此它的方法是connect而不是bind。因此正确的代码将是

import socket

s = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)


s.connect((socket.gethostname(), 21))

print(s)