Java を使用してクライアント/サーバー チャット アプリケーションを開発しましたが、配列からユーザーを削除する方法を知りたいです。特定のクライアントがログインすると、ユーザー名がユーザー名配列に保存され、クライアント ID がクライアント配列に保存されます。サーバーが複数のクライアントを受け入れられるようにするために、スレッドを使用しています。これで、アレイからユーザーを削除し、そのユーザーの接続を閉じる方法について誰でも案内できます。
新しいクライアントを追加し、ID をクライアント配列に保存する
public class AddClient implements Runnable {
Thread t;
AddClient(String tot) {
t = new Thread(this, tot);
t.start();
}
public void run() {
while (true) {
try {
try {
waitClient();
} catch (Exception ex) {
ex.printStackTrace();
}
for (int i = 0; i < client.length; i++) {
if (client[i] == 0) {
client[i] = i + 1;
id = i;
break;
}
}
//set stream to send and receive data
out[client[id]] = new ObjectOutputStream(connect.getOutputStream());
out[client[id]].flush();
in[client[id]] = new ObjectInputStream(connect.getInputStream());
ユーザー名はユーザー名配列に保存されます
username[client[id]] = cm.sender; //Add user in username[] array
ユーザーの削除
public synchronized void removeUser(int number) {
int position = number;
System.out.println("Server removing user " + username[number] + "which is client " + number);
for (int i = 0; i <= client.length; i++) {
if (position == client[i]) {
System.out.println("User to be remove found");
try {
client[i + 1] = client[i];
in[position].close();
out[position].close();
username[position] = null;
position = position - 1;
} catch (Exception e) {
e.printStackTrace();
}
}
}
HashTable を使用してクライアントを追加および削除しようとしています
public class ChatServerProtocol {
private String nick;
private AddClient a;
private Hashtable<String, AddClient> nicks = new Hashtable<String, AddClient>();
private boolean add_nick(String nick, AddClient a) {
if (nicks.containsKey(nick)) {
return false;
} else {
nicks.put(nick, a);
return true;
}
}
private boolean remove_nick(String nick, AddClient a) {
if (!(nicks.containsKey(nick))) {
return false;
} else {
nicks.remove(nick);
return true;
}
}
public ChatServerProtocol(AddClient a) throws IOException {
nick = null;
a = a;
}
しかし、どうすれば add_nick メソッドを呼び出すことができるでしょうか。クライアントがログインするたびに、ユーザー名がサーバーに送信され、サーバーはそれを cm.sender として読み取ります。スレッド変数も含める必要があります。後でユーザー名を削除できるようにユーザー名を追加する方法。
ChatServerProtocol.add_nick(cm.sender);