绑定时权限被拒绝

2024-06-16 10:17:30 发布

您现在位置:Python中文网/ 问答频道 /正文

又是我从Running Python server forever。我把我的文件上传到服务器,但是我得到了:

Traceback (most recent call last):
  File "./application", line 42, in <module>
    s.bind((TCP_IP, TCP_PORT))
  File "<string>", line 1, in bind
socket.error: [Errno 13] Permission denied

代码如下,供您参考:

...

TCP_IP = ''
TCP_PORT = 9090
BUFFER_SIZE = 256

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
while True:
    conn, addr = s.accept()
    ClientThread(conn, addr).start()

当套接字绑定到端口9090(或任何其他端口)时,它只返回此异常。我不需要是root,因为port > 1024

我该换什么?是TCP/IP还是TCP/U端口有问题?

~机会


Tags: 文件端口inipserverbindportline
3条回答

尝试使用'0.0.0.0'作为绑定地址。在Linux中,这意味着所有接口。

TCP_IP = '0.0.0.0'

并确保已禁用SELinux。

我建议进一步隔离这个问题,这意味着您希望使用“应该也能工作”但不是您的代码的东西来重现这个问题。

例如,尝试一个屏蔽的(已知工作的)HTTP脚本服务器,并观察如果它也失败了,那么这个问题与您发布的Python代码无关。这会让你走上正轨。。。权限。

仅供参考-在EC2上,我不认为您以根用户身份登录——我的EC2不支持根用户(它是Ubuntu)。相反,您“sudo”在以您的身份登录时运行该命令。系统不会提示我输入sudo密码(尽管在我之前可能已经有人配置了这个密码,方法是将NOPASSWORD=ALL添加到/etc/sudoers用户或组中)。

我对EC2的了解是,你在操作系统本身和amazonec2控制面板上都有防火墙和权限,你很容易遇到权限问题,浪费时间找错地方。

无论如何,请确认它是权限而不是您的Python代码,然后将此问题带到EC2论坛以获得最佳结果。

将主机设置为“无”,以便它正确绑定到所有适配器接口。

host = None
s.bind((host, TCP_PORT));

引用:http://docs.python.org/library/socket.html

相关问题 更多 >