少量のデータを待ってポートをリッスンし、何をすべきかを指示するプログラムがあります。そのプログラムの5つのインスタンスを実行します。1つは5000から5004までの各ポートで実行します。
ソケット「s」を作成し、データをポート5000に書き込んでから閉じる、Pythonで記述された2番目のプログラムがあります。次に、ポート番号をインクリメントし、5001に接続された新しいソケットを作成します。5004に達するまでこれを行います。
最初の3つのソケット接続は問題なく機能します。ポート5000から5002のプログラムは、データを問題なく受信します。ただし、4番目のソケット接続では、「接続が拒否されました」というエラーメッセージが表示されます。一方、4番目のリスニングプログラムは、ポート5003で待機していることを報告します。Telnetを使用して接続できるため、正しくリッスンしていることがわかります。
ポート番号を変更してみましたが、4回目の接続で失敗するたびに失敗しました。
チェックする必要のあるシステムに制限はありますか?送信側では常に1つのソケットしか開いていません。また、5つのうち3つを取得できるという事実により、考えられる基本的なトラブルシューティング手順の多くが不要になります。
何かご意見は?ありがとう!
- - 編集 - -
私はPythonバージョン2.6のCentOSLinuxを使用しています。次にいくつかのサンプルコードを示します。
try:
portno = 5000
for index, data in enumerate(data_list):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('myhostname', portno))
s.sendall(data)
s.close()
portno = portno + 1
except socket.error, (value,message):
print 'Error: Send could not be performed.\nPort: ' + str(portno) + '\nMessage: ' + message
sys.exit(2)