win32コンソールアプリでスレッドを複数起こしてwinsockの待ちうけをすることはできますか?

解決


MenPin  2010-05-18 09:59:34  No: 71617

win32コンソールアプリでスレッドを複数起こしてwinsockの待ちうけをすることは出来ますか?
可能ならその方法を教えて欲しいです。
よろしくお願いします。m(_ _)m


瀬戸っぷ  2010-05-18 11:04:49  No: 71618

WSAAsyncSelect()使うつもりでしたら、コンソールでは面倒なので止めた方が良いかと。
# コンソールアプリでメッセージループするようなモノ作ったことがないだけですが。

select()で処理するのでしたらコンソールでもかまわないでしょうが…。
# Windows版apacheをサービスではなくユーザープログラムとして起動する場合とかにソレ用のコンソールが開くことがありますな。

通常使用している中でコンソール(コマンドプロンプト)のウィンドウが開いているのは邪魔かと思いますが…
# うっかり閉じたらプログラム中断(強制終了)になりませんかね?

私なら不可視のウィンドウ作ってメッセージループ回しておきますが。
# コントロール用にタスクトレイにアイコンくらい登録するかも知れませんが。


MenPin  2010-05-18 13:13:28  No: 71619

回答ありがとうございます。
なるほどです。ウインドウでメッセージループの方向で考えて見ます。
コンソールだと異常終了とかxボタンで閉じた時の処理も出来ないですよね。
xボタンで閉じれないようにして、終了するときはパスワード入れないと閉じれないようにしたいと思います。
ところで、select()で待ってるとき、相手側の異常終了とかも感知するんですか?


ryo  2010-05-18 21:31:42  No: 71620

ネトゲが作りたいとのことのようですが
オフラインのゲームや、
ローカル内でもいいのでソケット通信で簡単なチャットソフトみたいなものとか

なにかしらの経験ありますでしょうか?


MenPin  2010-05-18 22:23:23  No: 71621

簡単なスロットゲームは作ったことがあります。
通信はこれが初めてです。
少しずつテストしながら、作っていこうと思ってます。
時間がかかってもいいです。


MenPin  2010-05-19 03:17:44  No: 71622

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


瀬戸っぷ  2010-05-20 08:34:24  No: 71623

なんか、オワっているのかどうか不明ですが…

>ところで、select()で待ってるとき、相手側の異常終了とかも感知するんですか?

FD_READ辺りが発生するのではないでしょうか。
recv()の戻り値が0で返されて終了処理に流れるかと思われます。


MenPin  2010-05-20 09:06:21  No: 71624

回答ありがとうございます。
別スレッドでも色々質問した結果、サーバープログラムは、
ウインドウアプリケーションで64ソケットごとにスレッドを立てて、
処理をすることになりそうです。
WSAASyncSelectを使ってみようと思いますが、非同期とスレッドの両立
をどのようにすればいいか色々調べても解決しません。
特に64ソケット問題が難しいです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加