
ネットワークプログラミング初心者です。
ただ今、C言語(初心者)にてCUIベースの非同期接続のチャットクライアントプログラムを作成していて困ったことがあります。
fgets関数で、クライアントAの発言を待ち、sendパケットでサーバーに、対してメッセージを送信する形を取っているのですが、こちらが、sendで入力待ちの時に、もう一台のクライアントBから、メッセージが来た時にクライアントAはfgets関数で、待っている状態なので、recv関数処理が出来ていません。ネットで、調べたんですけどWSAAsyncSelect関数を使ってノンブロッキングモードにすれば良い!って書いてあったのですが、関数の構造体引数を見ると、GUIプログラムで使うように見えます。もしこの関数が
使えるなら、どなたかご教授願います。もし使用できないならば、どうしたらいいか教えていただけないでしょうか?
<やりたい事>
クライアントAがメッセージ入力待ちの時に、クライアントBがメッセージを送ってきた場合に一時的にクライアントAのメモリ領域に保持して、
クライアントAがメッセージを送信した時にその保持していた、メモリ領域をprintfなどで、出力したいです。
初心者ですが、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
ノンブロックIOを使いたいだけならioctlsocket()かWinSock2ならWSAIoctl()で良いのでは。
ノンブロックIOにしてポーリングするとCPU使用率が跳ね上がります。
素直にスレッドを起こすのが一番簡単だと思いますが。
返答ありがとうございます。ioctlsocketという関数は知りませんでした。
ありがとうございます。調べてみます。スレッド関数も使おうと思ったのですが、初心者ながら少しとっつきにくい関数なので、敬遠していました。
ありがとうございました。
No.2
- 回答日時:
CUIベースでネットワークなら基本的にselectを使います。
非同期IOやスレッドより扱いやすいと思います。
selectは複数待ちの機能です。複数のfdに対して同時に待つことができますから、コンソールとサーバーの両方に対して待ちデータがきた方を読み取って処理すれば良いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の関数のextern宣言
-
コンソールアプリを作成するの...
-
大量のデータを読み込んで表示...
-
C言語について。
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C言語 関数、変数の宣言について
-
UART通信の取説で,left floati...
-
逆コンパイルと逆アセンブルの...
-
私は
-
C#でログファイルにファイルパ...
-
gccを行ってもexeファイルが生...
-
ストリームについて。
-
int16_t の _t は何?
-
C言語 1から20までの逆数の和を...
-
visual studio 2022でのC#プロ...
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
C言語について(初心者)
-
プログラミングc++を全く分か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
非同期通信を使うタイミングが...
-
OVERLAPPED構造体が分かりませ...
-
このプログラムの使用がわかる...
-
ExcelVBAで非同期のsocket通信...
-
RS-232Cの通信方式に関して。
-
VistaガジェットでGmailのメー...
-
Ajaxの意味について
-
SRAM製品の同期・非同期の違い
-
非同期関数とノンブロッキング...
-
AJAX通信のエラー処理について
-
非道式6進カウンタと非同期式10...
-
iTunesで同期させる曲目を指定...
-
AJAX通信が終わるまで次の処理...
-
JK-FFを使う非同期10進・2進カ...
-
AJAXとSEO。同期通信とPHP送信...
-
Javadcriptでwebサーバー側にあ...
-
ajaxの使いどころ
-
C#でUDP通信
-
Asrock(P4i65G)のBiosについて
-
AJAX通信で、ボタンをクリック...
おすすめ情報