ネットワーク上のすべてのアクティブなポートを取得するためのテストアプリを作成しました。いくつか検索したところ、これが最も簡単な方法であることがわかりました。だから私はそれを試しました、そしてそれはうまくいきます。次に、サーバー側とクライアント側で別のソケットアプリを作成しました。これは非常に基本的で、サーバーの作成、サーバーへの参加、アクティブなサーバーを取得するための更新ボタンがあります。このメソッドが呼び出されるのは、更新ボタンを押したときだけです。アプリケーションを3回以上開いて、4番目までに接続されたクライアントでサーバーを作成すると、このメソッドはこの(Unknown error(0xc0000001))エラーを出し始めます。なぜこれが起こる可能性があるのか考えていますか?面白いことに、最初に開いた最初のアプリケーションではこれを取得できません。どういうわけかそれがこれか何かのロックになるかどうかはわかりません。
例外は次の行でスローされます。
IPEndPoint[] endPoints = properties.GetActiveTcpListeners();
これがメソッドです。最小範囲と最大範囲内のすべてのポートに対してListのオブジェクトを返します。
public static List<UserLocalSettings> ShowActiveTcpListeners(int min, int max)
{
List<UserLocalSettings> res = new List<UserLocalSettings>();
try
{
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] endPoints = properties.GetActiveTcpListeners();
foreach (IPEndPoint e in endPoints)
{
if (e.Port > (min - 1) && e.Port < (max + 1))
{
UserLocalSettings tmpClnt = new UserLocalSettings();
tmpClnt.player_ip = e.Address.ToString();
tmpClnt.player_port = e.Port;
tmpClnt.computer_name = Dns.GetHostEntry(e.Address).HostName;
res.Add(tmpClnt);
}
}
}
catch (Exception ex1)
{
}
return res;
}
例外のスクリーン印刷は次のとおりです。