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

ホストを「None」に設定して、すべてのアダプター インターフェイスに適切にバインドします。

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 パスワードの入力を求められません (私の前に /etc/sudoers ユーザーまたはグループに NOPASSWORD=ALL を追加することで、誰かがパスワードを設定した可能性があります)。

EC2 について私が知っていることは、OS 自体と Amazon EC2 コントロール パネルの両方にファイアウォールとアクセス許可があり、アクセス許可の問題に簡単に遭遇し、間違った場所を探すのに時間を浪費する可能性があるということです。

とにかく、それが Python コードではなくパーミッションであることを確認してから、この問題を EC2 フォーラムに持ち込んで、最良の結果を得てください。

于 2013-02-13T15:27:35.903 に答える