ここでの私の最初の質問ですので、気楽に行ってください。
これは私の状況です:
Twistedフレームワークを使用してPythonでネットワークゲームを作成しています。ゲームは、あるポートでTCPを介してマスターサーバーに接続し(接続は認証のために維持されます)、別のポートでネットワークサーバーに参加できます。現在、ネットワークプログラムとマスターサーバープログラムの両方が同じリモートマシンで実行されています。
これまでのところ、少なくともPythonインタープリターを介してゲームを実行する場合は、ほとんどすべてがうまく機能します。その場合、両方のサーバーへの接続は常に正常に機能します。この問題は、py2exeを使用してクライアント用のスタンドアロン実行可能ファイルを作成した後にのみ発生します。
私の開発マシンで実行可能ファイルを実行すると、ゲームを開始し、マスターサーバーに接続して認証することができます。Wiresharkは、接続が維持され、定期的なポーリングがACKされていることを教えてくれます。ここまでは順調ですね。しかし、ネットワークゲームサーバーに接続しようとすると(隣接するポートの2番目のTCP接続)、結果に一貫性がありません。100回に1回は動作します。残りの時間は、何もしない(Twistedはコールバックを起動しません)か、「ユーザータイムアウトにより接続障害が発生しました」を返すまでの約50/50です。0.5秒以内にエラーが発生します。
面白いことに、Wiresharkは、エラーを返すか何もしないかに関係なく、これらの失敗した接続の「試行」に対する発信TCPパケットを表示しません。
次に、他のテストマシンでまったく同じゲームクライアント実行可能ファイルを実行すると、すべてが正常に機能するため、さらに奇妙になります。接続の問題はまったくなく、毎回機能します。どちらのマシンも元のWindows7を実行しており、開発マシンはProfessional、もう一方のHomeEditionを実行しています。
また、クライアントと同じマシン(「localhost」に接続)でもゲームサーバーをローカルで実行しても、この問題には影響がないことも指摘しておく必要があります。症状は同じままです。
では、ここで何が起こっているのでしょうか?