こんばんわ、
大工と申します。
ソケットプログラミングでチャットを作ってみようと仕様を考えてたんですが、
お作法としてよくわからないことが出てきたので質問させてください。
・チャット
1対1のチャットを想定していますが、1対Nのチャット、
つまり各ユーザの画面にはほかのユーザの発言がサーバから送られてくる方式はどのように設計すれば適切なのでしょうか?
ソケットプログラムに関しては初心者です、よろしくお願いします。
チャットプログラムのお作法
Re: チャットプログラムのお作法
「設計」を考え方だと解釈して、とりあえずN:1について。
1つのグループでいいのであれば、
クライアント側の動き
1、クライアントはクライアントソフト立ち上げ時にサーバーへ自分のIPを送信。
2、好き勝手にサーバーへメッセージを送信。その際にも自分のIPを添える。
3、サーバーから送信されたメッセージは全て受けとる。
サーバー側の動き
1、サーバーは受け取ったIPを保持しておく。
2、メッセージ受信時は、添えられたIP以外のクライアント全てに受け取ったメッセージを送信。
どこまで詳細な設計を希望してるのかは分かりませんが、大まかにはこんなものでいいのではないでしょうか。メンバー・グループ管理やログイン・アウト処理を入れると少し面倒になりますが、その辺も必要でしょうか?
1つのグループでいいのであれば、
クライアント側の動き
1、クライアントはクライアントソフト立ち上げ時にサーバーへ自分のIPを送信。
2、好き勝手にサーバーへメッセージを送信。その際にも自分のIPを添える。
3、サーバーから送信されたメッセージは全て受けとる。
サーバー側の動き
1、サーバーは受け取ったIPを保持しておく。
2、メッセージ受信時は、添えられたIP以外のクライアント全てに受け取ったメッセージを送信。
どこまで詳細な設計を希望してるのかは分かりませんが、大まかにはこんなものでいいのではないでしょうか。メンバー・グループ管理やログイン・アウト処理を入れると少し面倒になりますが、その辺も必要でしょうか?
Re: チャットプログラムのお作法
複数のクライアントとのチャットなのでTCP通信だと想定します。
Windowsの場合は実装方法が幾つかあるようです
1.select関数を用いた同期通信
2.マルチスレッドによる通信
3.WSAAsyncSelect関数等によるイベントでの非同期通信
特徴は
1.イベントを用いないので、コンソールアプリケーションでも実装が比較的簡単です
2.イベントを用いません。、サーバー側のデータの同期が面倒になるかもしれません
3.ウィンドウアプリケーションであれば比較的簡単にイベントによる実装できます。
どのような仕様、目的にするかで、設計が変わるかと思います
Windowsの場合は実装方法が幾つかあるようです
1.select関数を用いた同期通信
2.マルチスレッドによる通信
3.WSAAsyncSelect関数等によるイベントでの非同期通信
特徴は
1.イベントを用いないので、コンソールアプリケーションでも実装が比較的簡単です
2.イベントを用いません。、サーバー側のデータの同期が面倒になるかもしれません
3.ウィンドウアプリケーションであれば比較的簡単にイベントによる実装できます。
どのような仕様、目的にするかで、設計が変わるかと思います