C言語(unix環境)でチャットプログラミングを作りたいのですが、まずは、TCP/IPによるマルチクライアントで簡単なメッセージのやりとりができるプログラムを練習として作りたいと考えています。
そこでサーバにクライアントからメッセージが届いた時点で全クライアントにメッセージを送信(write)し、逐次更新されるようにしたいのですが、クライアント側で常にread関数を呼び出すのは非常に不格好だし、メッセージを入力するといった他の処理ができなくなると思うのです。
何か方法はありますでしょうか?
なにぶんネットワークプログラミングは始めたばかりですので初心者向けの解説をお願いします。
No.2ベストアンサー
- 回答日時:
マルチスレッドを使う手もありますが、ネットワークの基本はselectでしょう。
クライアントではサーバからの更新データとユーザからの入力の2つを同時に待つ必要がありますが、サーバも複数のクライアントからの通信を同時に待つ必要があります。
このように複数の待ちを同時に実行する場合、selectを使います。詳細な使い方はマニュアルなどを参照してください。
No.3
- 回答日時:
解決法は、4つほどあります。
参考になれば幸いです。(1)read関数をノンブロッキングにする。
->read関数を呼び出しても、データ到達なしなら即リターンする。
キーワード:O_NONBLOCK
(2)割込みを使用する。
->データ到達時に割込み処理がはしってくれるので常に待つ必要なし。
キーワード:sigaction, SIGIO
(3)selectを使用する。
->ターミナル上でのチャットプログラムならこれでOKでしょう。
(ソケット以外にもキーボード入力も感知できるので)
キーワード:特に無し。
(4)スレッドを使用する。
->スレッドの中でreadすればメインのほうは、別処理ができる。
キーワード:pthread
GUI使用するなら(2)か(4)でしょう。
No.1
- 回答日時:
最近Windows下で似たようなことをやりましたが、参考になる……かな?
マルチスレッドは出来ないでしょうか
入力~送信と受信~表示を別のスレッドに分けてしまえばいいと思うのですが、いかがでしょう。
参考URL:http://www.google.co.jp/search?q=UNIX+C%8C%BE%8C …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- サーバー (童顔♀です)webサイト納品後,記事更新をこちらでする場合どうやりますか....? 3 2023/08/09 04:44
- ネットワーク 社内ネットワークの1台だけ接続できないときがある 4 2023/01/25 11:58
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- 個人事業主・自営業・フリーランス インボイス制度は、クライアントごとに請求書を分ける事はできますか? 6 2023/04/03 14:22
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル VBA でのCOMポート...
-
TCP/IP通信時のサーバーからの受信
-
Winsockで接続待ちタイムアウト...
-
ソケット通信 同じポート番号...
-
C#とTCP/IPを利用したサーバー...
-
相手のIPアドレスを取得する方法
-
ソケットプログラミングに関す...
-
VB6‥ソケットについて
-
ソケットのrecvの戻り値が0
-
ソケットのクローズについて
-
SIPがNATを越えられない理由
-
Javaプログラム同士のプロセス...
-
UdpClient 送信元のIPアドレ...
-
vbでの232c接続プログラムについて
-
VB6のwinsockでconnectできない
-
空きポートの取得方法
-
Linuxのsocket接続でacceptでき...
-
UDP通信におけるbind関数について
-
Winsockプログラムの初歩的質問...
-
どうか、POSTでのファイル転送...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットのrecvの戻り値が0
-
ソケットを用いた1対多通信につ...
-
UdpClient 送信元のIPアドレ...
-
ソケットでクライアントのipア...
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
同じLAN内パソコンのIPアドレス...
-
Connectエラーが出てしまう・・...
-
ソケットのクローズについて
-
CreateFile関数でCOMポートが開...
-
異なる言語間でのソケット通信...
-
C言語でHTTP1.1のキープアライ...
-
送信したデータの一部が文字化...
おすすめ情報