You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python TCP套接字实现FTP文件传输的绑定报错求助

解决原生TCP Socket绑定FTP服务端的两个常见错误

先拆解你遇到的两个问题,逐个给你解决:

1. socket.gaierror: [Errno 11001] getaddrinfo failed 错误

你用 s.bind(('ftp://192.168.1.14/', 21)) 是完全错误的用法——socket的bind方法不需要带ftp://前缀,这个前缀是FTP协议的URL标识,而原生TCP Socket只需要纯IP地址(或主机名)和端口号。

正确的绑定写法应该是直接用纯IP:

import socket

s = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 直接使用纯IP地址,去掉ftp://前缀
s.bind(('192.168.1.14', 21))

如果想让服务端监听所有可用网卡(方便同一局域网内其他设备连接),也可以用0.0.0.0作为绑定地址:

s.bind(('0.0.0.0', 21))

2. OSError: [WinError 10013] 权限被拒绝 错误

这是Windows系统的权限限制导致的:端口号1-1023是系统预留的知名端口,普通用户权限的程序无法绑定这些端口,必须以管理员身份运行你的Python脚本。

解决方法有两个:

  • 右键点击你的Python IDE或命令提示符,选择「以管理员身份运行」后再执行脚本
  • 换一个大于1024的端口(比如2121),这类端口不需要特殊权限:
    s.bind(('192.168.1.14', 2121))
    

补充:原生TCP实现文本文件传输的核心逻辑示例

解决绑定问题后,给你一个极简的文件传输框架,帮你完成作业要求:

服务端代码(发送文本文件)

import socket

# 创建TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和无权限问题的端口
server_socket.bind(('0.0.0.0', 2121))
# 开始监听,最多允许5个等待连接
server_socket.listen(5)

print("服务端启动,等待客户端连接...")
# 接受客户端连接
client_socket, client_addr = server_socket.accept()
print(f"已连接客户端:{client_addr}")

# 读取要传输的文本文件
with open('server_text.txt', 'r', encoding='utf-8') as f:
    file_content = f.read()

# 先发送内容长度(避免粘包)
client_socket.send(str(len(file_content.encode('utf-8'))).encode('utf-8'))
# 等待客户端确认
client_socket.recv(1024)
# 发送文件内容
client_socket.send(file_content.encode('utf-8'))

# 关闭连接
client_socket.close()
server_socket.close()

客户端代码(接收文本文件)

import socket

# 创建TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端(替换为你的服务端IP和端口)
client_socket.connect(('192.168.1.14', 2121))

# 接收文件长度
file_length = int(client_socket.recv(1024).decode('utf-8'))
# 发送确认信号
client_socket.send(b'ok')

# 分段接收文件内容
received_content = b''
while len(received_content) < file_length:
    chunk = client_socket.recv(1024)
    if not chunk:
        break
    received_content += chunk

# 写入本地文件
with open('client_text.txt', 'w', encoding='utf-8') as f:
    f.write(received_content.decode('utf-8'))

print("文件接收完成")
# 关闭连接
client_socket.close()

这个示例是极简版本,足够完成作业的文本传输需求,实际场景中可以再补充异常处理(比如文件不存在、连接中断等)。

内容的提问来源于stack exchange,提问作者Ahmad Anis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:47:42