現在マルチスレッドサーバーを作ったのですが、
多人数チャットの作り方がよくわかりません。
スレッドでの処理をしているのですが、
1つのクライアントがメッセージを送ってきたときに
他のクライアント全てにそのメッセージを返すには
どうすればよいのでしょうか?
どうかよろしくお願いします。
以下(自分のHPでソースコードダウンロード可)
http://www.ab.wakwak.com/~soikawa/
ネットワークRPGサンプル(Net-Rpg) ->
マルチスレッドサーバー
(クライアント複数対サーバーです。)->
サーバープログラム(Port8番使用)
他のクライアントを受け持つスレッドにこのテキストを送信しろとお願いします。
あるいは'全クライアントに送信する関数'を用意し、それを呼びます。
>他のクライアントを受け持つスレッドにこのテキストを送信しろとお願いします。
>あるいは'全クライアントに送信する関数'を用意し、それを呼びます。
他のクライアントを受け持つスレッドに
このテキストを送信しろ(Send関数)
の命令の送り方がよくわかりません。
他のクライアントを受け持つスレッドを参照するには
どうすればよいのでしょうか?
また、'全クライアントに送信する関数'
でも、
他のクライアントを受け持つスレッドを参照
(他のクライアントのソケットを参照)
するには
どうすればよいのでしょうか?
手抜きしたければ、DirectXのDirectPlayが
「リアルタイム音声会議システム」を丸ごと提供します。
自作にこだわるなら、話は別ですが。ところで
> Port8番使用
こんなことして、大丈夫?
> 他のクライアントを受け持つスレッドに
> このテキストを送信しろ(Send関数)
> の命令の送り方がよくわかりません。
具体的なコードを示すことはできません。
あなたの設計が明確にならない限り。
# スレッド間通信や排他制御にはいろんな方法があります。
# どうやって実装するかは、あなたの設計次第です。
> 他のクライアントを受け持つスレッドに
> このテキストを送信しろ(Send関数)
> の命令の送り方がよくわかりません。
実装方法はいろいろありますが、
自分でメッセージ送受信の仕組みを作るより
CWinThreadを派生してユーザーインターフェイス
スレッドを作ったほうが簡単で安全でしょう。
CWinThread::PostThreadMessage()を使って
メッセージを投げることが出来ます。
できました。
クライアントの数を調べ、Send関数のソケットをいじり、
アクセスしてきた
クライアントのソケット全てにSend関数を送るという方法をとりました。
>> Port8番使用
>こんなことして、大丈夫?
8番を使うのはまずいのでしょうか?
512番以下は予約されています。
1024番以下の使用はスーパーユーザに限られています(バークレーUNIX)。
一般ユーザが使えるのは1025~32767番です。
了解しました。