1

又是我,来自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_PORT 的问题?

~机会

4

3 回答 3

1

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

TCP_IP = '0.0.0.0'

并确保 SELinux 已禁用。

于 2012-09-17T13:42:24.227 回答
0

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

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

参考:http ://docs.python.org/library/socket.html

于 2012-09-16T11:29:38.143 回答
0

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

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

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

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

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

于 2013-02-13T15:27:35.903 回答