!!!サーバープログラム *クライアントから送られたデータをそのまま全クライアント(送ったきたクライアントを除く)に送信する。 *IOチャネルではクライアントのファイル識別子の取得が分からなかったため、ソケットにより通信を実装している。 *ソケットの監視はselect関数で実装。ループ毎にselectを実行している。 *gtkとの統合は、ループ文をn秒毎に実行することで実現可能と考えている。 *サーバー自体は操作しない上にデータを受け取って流すだけだからgtkで実装する必要はない? !!バグ どうやらクライアントのプロセスを強制終了(Ctrl+C)すると、何もないデータをサーバーが受信し続ける。((br)) つまり strlen(msg) == 0 のデータ。強制終了させないことはできないので、条件分岐によってソケットを閉じる処理を追加した。((br)) !!!クライアントプログラム *stdinからの入力を監視し、入力を取得したらサーバーに送信する。 *ソケットの監視はサーバーと同様の処理で監視。 *名前とメッセージの結合を行なった後に送信する。 *サーバーと同様に長さ0データを受け取った時はソケットを閉じる処理を追加した。 !!バグ 入力中にメッセージが到着すると入力中のメッセージの続きに到着したメッセージが表示される。綺麗に表示したいならブロッキングする必要があり、すぐにメッセージを表示できなくなる。今回はメッセージの滑らかな表示を優先させた。 !!!ブロッキングとノンブロッキング scanfをループ中に実行するとプログラムが止まって、入力待ちとなる。この状態ではメッセージを受け取る関数も動かすことができない。readなども同様に受診を待つ。((br)) ブロッキングせずにメッセージの受け取りと入力を行うためにはソケット(ファイル識別子)にデータが届いているかをチェックし、届いた時にだけ読み込みするようにしたい。 そのデータが届いているかのファイル識別子の監視をselect関数で行う。 *select(int nfds,