2

厄介な問題がありますsocket.errorエラー:[Errno 10048]:アドレスはすでに使用されています。SeleniumとPythonを使用した自動テストでは、通常、各ソケットアドレス(プロトコル/ IPアドレス/ポート)の使用は1回のみ許可されます。この問題は非常に興味深いため、あるマシン(Linux)で実行すると正しく機能しますが、別のマシン(WindowsXP)ではこのエラーが発生します。システムを再インストールしてセットアップをやり直した後に問題が発生したことを付け加えておきます。以前の構成では、すべてが正常に機能していました。忘れたものはありますか?誰かが以前にそのような問題を思いついたことがありますか?

誰かがこの問題に対処する方法のアイデアを持っていますか?

現在の構成/ライブラリ:

python 2.7、numpy、selenium.py

4

4 に答える 4

1

ソケットを複数回開閉すると、TIME_WAIT状態になる可能性があります。これは、別々のプラットフォームで異なる動作をする理由を説明します(異なるTIME_WAIT設定とTCPスタック)。ソケットオブジェクトを制御している場合は、バインドする前にSO_REUSEADDRを設定して、問題を修正できます。

例えば:

sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, server.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) | 1)

コマンドプロンプトから実行netstat -bして、状態と所有プロセスを含む開いているソケットのリストを表示できます。

于 2011-05-30T13:30:09.827 に答える
1

私は以下の投稿で答えを見つけました:

Pythonurllib2。URLError:<urlopenエラー[Errno 10048]通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の使用は1回のみ許可されます>

この問題はWindowsの制限であることが判明しました

于 2011-05-31T06:15:24.330 に答える
0

いくつかの可能性があります。どのテストも特定のポートでリッスンできない場合(どのポートかは指定しません)、Windowsマシンは以前に開いていたポートで何かを実行している可能性があります。この新しいサービスは、再インストール中に表示された可能性があります。一方、一部のテストでのみ問題になる場合、または少し散発的である場合は、プログラミングの問題(初期のテストでソケットを閉じるのを忘れて後のテストに干渉する)またはタイミングの問題のいずれかである可能性があります。 (以前のテストのソケットは、新しいソケットが開こうとする前に完全に閉じられていません)。明らかに、これらの問題のそれぞれに対処するためのさまざまな方法がありますが、詳細がなければ、これ以上のことはできないと思います。

于 2011-05-30T12:51:23.403 に答える
0

Windowsにすでにポート4444を使用しているソフトウェアがあるかもしれませんが、Seleniumを別のポートに設定して再試行できますか?

于 2011-05-30T13:33:10.260 に答える