ページ 11

サーバーによる複数のクライアントの管理方法について

Posted: 2011年11月08日(火) 23:47
by shiro4ao
こんばんは。
現在、クライアントサーバで通信するプログラムを書いています。

1つのサーバーにつき、複数のクライアントが接続して、
クライアント同士で相手を探し、そのあと会話するようにしたいと思います。

そのために、クライアント達の情報をサーバーにある構造体の配列で管理したいと思うのですが、
クライアントへの対応のための処理がクラスで書いてあります。

そのため、クライアントのクラスから、構造体の配列が見えないせいで管理できなくなりました。
出来れば、クライアントのクラスに全部、通信処理を書き込めたらいいのですが実現できずに困っています。

こういった場合の、基本的な手法などありますでしょうか?
抽象的な質問で申し訳ないですが、よろしくお願いします。

=====client.h======
class Client {
public・・・・
//構造体の配列をここで参照したいが、見えない
}
====================

======main.cpp=====
#include "client.h"
int main(){
//構造体の配列を宣言
}
====================

Re: サーバーによる複数のクライアントの管理方法について

Posted: 2011年11月09日(水) 09:15
by naohiro19
コンストラクタに配列を渡すのはどうでしょうか?

Re: サーバーによる複数のクライアントの管理方法について

Posted: 2011年11月09日(水) 09:57
by YuO
クライアントはサーバーから得られる情報が全て,と割り切って作るしか無いですし,
サーバーはクライアントが必要になる情報を提供する必要があります。
また,クライアントとサーバーが同一の構造体等で情報を管理する必要もありません。
# そもそも,クライアントとサーバーでプログラム言語が別,というのもよくある話かと。

今回の場合だと,最終的にクライアント同士で直接会話をすることを仮定すると,クライアントが知らないといけないのは,
  • サーバーとの接続方法
    サーバーとのやりとりをクラス化するなりすることになると思います
  • 現在サーバーに接続しているクライアントの識別情報
    名称とIPでもいいですし,名称と一意ID(サーバーに再度問い合わせてIPを得る)でもよいです
  • 現在自分と接続状態のクライアントの情報
程度のはずです。

サーバーから取得したクライアント識別情報を元に,各クライアントが他のクライアント情報の配列等を構築すればよくなります。

Re: サーバーによる複数のクライアントの管理方法について

Posted: 2011年11月09日(水) 17:51
by shiro4ao
ご回答ありがとうございます。

>naohiro19さん
コンストラクタは使ったことがないですが、なんとか
サーバー側ではコンストラクタに入れて渡すようにしようと想います。

>YuOさん
クライアントの操作に必要な情報は全部サーバーで管理して、同期しなくていいように
作り変えようと思います。

なんとか方針が立ってきたので、作れるかもしれません。
これにて解決とさせて頂きます。

ありがとうございました。