Windows 7 で Python 2.6.5 を使用してカスタム TCP スタックを作成し、ポート 80 で有効な http ページ リクエストをローカルで処理しようとしています。しかし、Windows 7 のセキュリティ強化により問題が発生しました。このコードは Vista では動作しました。
サンプルコードは次のとおりです:
import SocketServer
import struct
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
headerText = """HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/html
Content-Length: 1354"""
bodyText = "<html><body>some page</body></html>"
self.request.send(headerText + "\n" + bodyText)
if __name__ == "__main__":
HOST, PORT = "localhost", 80
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
C:\python>python TestServer.pyトレースバック(最後の呼び出しが最後):
ファイル「TestServer.py」、行 19、server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) ファイル「C:\Python26\lib\SocketServer.py」、行 400、初期化self.server_bind() ファイル "C:\Python26\lib\SocketServer.py"、行 411、server_bind 内 self.socket.bind(self.server_address) ファイル ""、行 1、bind 内socket.error: [Errno 10013] アクセス権限によって禁止されている方法でソケットにアクセスしようとしました
これを Windows 7 で動作させるにはどうすればいいのでしょうか?
[2010年5月5日 23:44 PDT編集]答えこのエラーは、1024 未満のポートにアクセスするときに昇格された / スーパーユーザー権限が必要であるために発生すると説明されています。より大きなポート番号を使用して、それが機能するかどうかを確認します。ただし、ローカル管理者アカウントがポート 80 にアクセスできない理由をまだ知りたいです。
ベストアンサー1
私も同じ問題に遭遇しました。私のシステムは Win7 です。ターミナルで netstat -na|findstr port のようなコマンドを使用すると、ポートが使用されていることがわかります。このメッセージなしでサーバーを起動したい場合は、使用されていない他のポートを変更できます。