win32コンソールアプリでスレッドを複数起こしてwinsockの待ちうけをすることは出来ますか?
可能ならその方法を教えて欲しいです。
よろしくお願いします。m(_ _)m
WSAAsyncSelect()使うつもりでしたら、コンソールでは面倒なので止めた方が良いかと。
# コンソールアプリでメッセージループするようなモノ作ったことがないだけですが。
select()で処理するのでしたらコンソールでもかまわないでしょうが…。
# Windows版apacheをサービスではなくユーザープログラムとして起動する場合とかにソレ用のコンソールが開くことがありますな。
通常使用している中でコンソール(コマンドプロンプト)のウィンドウが開いているのは邪魔かと思いますが…
# うっかり閉じたらプログラム中断(強制終了)になりませんかね?
私なら不可視のウィンドウ作ってメッセージループ回しておきますが。
# コントロール用にタスクトレイにアイコンくらい登録するかも知れませんが。
回答ありがとうございます。
なるほどです。ウインドウでメッセージループの方向で考えて見ます。
コンソールだと異常終了とかxボタンで閉じた時の処理も出来ないですよね。
xボタンで閉じれないようにして、終了するときはパスワード入れないと閉じれないようにしたいと思います。
ところで、select()で待ってるとき、相手側の異常終了とかも感知するんですか?
ネトゲが作りたいとのことのようですが
オフラインのゲームや、
ローカル内でもいいのでソケット通信で簡単なチャットソフトみたいなものとか
なにかしらの経験ありますでしょうか?
簡単なスロットゲームは作ったことがあります。
通信はこれが初めてです。
少しずつテストしながら、作っていこうと思ってます。
時間がかかってもいいです。
回答ありがとうございました。
編集 削除なんか、オワっているのかどうか不明ですが…
>ところで、select()で待ってるとき、相手側の異常終了とかも感知するんですか?
FD_READ辺りが発生するのではないでしょうか。
recv()の戻り値が0で返されて終了処理に流れるかと思われます。
回答ありがとうございます。
別スレッドでも色々質問した結果、サーバープログラムは、
ウインドウアプリケーションで64ソケットごとにスレッドを立てて、
処理をすることになりそうです。
WSAASyncSelectを使ってみようと思いますが、非同期とスレッドの両立
をどのようにすればいいか色々調べても解決しません。
特に64ソケット問題が難しいです。