チャットアプリケーション(サーバー)を作成しているところですが、問題があります。
サーバーはで接続を受け入れてから、クラスTcpClient
の新しいインスタンスを作成し、そのインスタンスへの参照を渡します。この新しいインスタンスは、将来の使用のために参照を保存します。次に、新しいインスタンスがリストに追加されます。Connection
TcpClient
Connection
Connection
Users
擬似コードを見てみましょう:
while(true)
{
// 1. Accept connection into new Client instance
Client = new TcpClient()
Client = AcceptTcpClient();
// 2. Create new Connection object and pass Client's reference to it.
Connection abc = new Connection(Client);
// Add new user to users collection
Users.Add(Connection);
}
これで、abc
インスタンスはClientオブジェクトへの参照を持ちます。ここまでは問題ありませんが、while()ループが次の反復に入るたびに、デバッガーでClientインスタンスが破棄されていることがわかります(ガベージコレクターによって)。
したがって、別の反復が開始されるとConnection
、リスト内のすべてのインスタンスUsers
はOKですが、それらの参照は、TcpClient
再利用されたインスタンスのみを参照します。したがって、接続はすぐに閉じられ、作業を行うことはできません。
問題がどこにあるか知っていますか?答えてくれてありがとう。
正確なソースコードが必要な場合があります。その場合は、もちろん提供できます。