5

カスタム TCP サーバーとクライアントを作成していて、大量のリクエスト (正確には 60,000) を実行すると、このソケット エラー 10048 が発生し始めます。これは、 「アドレスが既に使用されている」ことを意味するはずです。

プロセスを2〜3分間一時停止してから再度開始しない限り、エラーが発生し続け、再起動後しばらくして同じエラーが発生し始めます。クライアント プロセスを一時停止してサーバー プロセスを再起動しても、クライアントで同じエラーが発生します。したがって、これは完全なクライアント側の問題です。

ただし、これは意味がありません。このエラーは通常、バインド時にのみ発生し、このエラーはサーバーではなくクライアントで発生します。考えられる理由は何ですか?

私の初期化の小さな抜粋:

TcpClient client = new TcpClient();
client.Connect("XXXXX -- some ip", 25000);
client.NoDelay = true;
NetworkStream clientStream = client.GetStream();

また、他のすべては正常に動作しているようで (送受信にかかる時間を含む)、これは使用127.0.0.1 時には完全に機能しますが、別の LAN コンピューターに配置すると 10048 エラーが発生し始めます。

初期化の仕方がおかしいのでしょうか?クライアント側でこのエラーを引き起こす可能性のあるものは何ですか?

4

2 に答える 2

9

http://msdn.microsoft.com/en-us/library/e160993d%28v=VS.90%29.aspx SetSocketOptionを参照してください。DontLinger か ReuseAddr、またはその両方が必要かどうかはわかりません。基本的に、ソケットは TCP 接続を切断した後しばらくの間 TIME_WAIT 状態でスタックします。十分な数になると、新しいクライアント接続を作成できなくなります。netstat -na プログラム出力でこれを確認します。

レジストリで変更することにより、ソケットが TIME_WAIT 状態に留まる時間を短縮することもできます : http://msdn.microsoft.com/en-us/library/aa560610%28BTS.20%29.aspx特にテストの場合は、おそらく安全に 1 ~ 2 分に短縮できます。

免責事項: 私は決して TCP の専門家ではありません。

于 2010-03-29T20:38:59.100 に答える
0

クライアント ポートが不足していませんか?

http://www.gavaghan.org/blog/2010/02/17/tcpip-parameter-tuning-for-rapid-client-connections/

関連する可能性のある質問:サーバーの単一ポート (ソケット) での同時接続の最大数

于 2010-03-29T20:40:00.767 に答える