- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:多人数のチャットソフトを考えています)
多人数のチャットソフトを開発中に問題発生!サーバを挟んで1対多のチャットがうまくいかない
このQ&Aのポイント
- Winsockを使用して開発中の多人数チャットソフトで、1対1のチャットは成功していますが、サーバを挟んでの1対多のチャットが上手くいきません。質問者はサーバがクライアントごとにスレッドを作成し、ディスクリプタを配列に格納して送信したいと考えています。
- しかし、実行すると無数のスレッドが作成され、プログラムが強制終了してしまいます。質問者は初心者のため、プログラムのミスがある場合に教えて欲しいとしています。
- また、質問者はアイデアがあれば教えて欲しいとも述べています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
気がついたことを幾つか。 1.accept()の第三引数には、第二引数に渡すバッファサイズをセットしておかないとダメです。 Ssize = sizeof( Ssize ); Csock[i] = accept( s, (struct sockaddr *)&Saddr, &Ssize ); たぶん、この値が不定値でエラーとなっているため、ブロッキングされずに、大量にスレッドが生成されているのかも? 2.一文字ずつ受信/配信より、一行ずつ処理しないと、多人数は表示がおかしくなります。 同時に入力されると、配信された文章がチャンポンになりませんか? また、入力していた文章を、ログをみて書き直すこともあるでしょうから、 取り消しが出来るように、一行づつクライアントから送ってもらい、サーバで分散した方が、 使いやすいと思いますよ?
その他の回答 (1)
- drum_KT
- ベストアンサー率43% (1108/2554)
回答No.1
while(1){ Csock[i] = accept(s,(struct sockaddr *) &Saddr, &Ssize); CreateThread(Csock[i]); //クライアントごとにスレッドを作ってるつもり i++; } うん。これじゃあ確かにあっという間にスレッドが無数にできあがるよね。無限ループだから。