Skip to content

送受信用のスレッドを用いて、最大クライアント数が10までの複数のクライアントが同時に接続できるチャットプログラム

Notifications You must be signed in to change notification settings

batora9/c-chatapp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C言語チャットアプリ

(主に埼玉大学生)本レポジトリ内のコードをコピーすることは禁止です。

Copyright 2025 batora All rights reserved.

送受信用のスレッドを用いて、最大クライアント数が10までの複数のクライアントが同時に接続できるチャットプログラム

GTK+3を用いたC言語でGUIを備えた簡易的なチャットアプリ

各ファイルの説明

  • server.c: チャットプログラムにおけるサーバー側
  • client.c: チャットプログラムにおけるクライアント側
  • client_gui.c: チャットプログラムにおけるクライアント側のGUI
  • commands.h: チャットプログラムにおけるコマンド定義ファイル
  • Makefile: コンパイル用のMakefile
  • readme.md: このファイル

コンパイル及び実行方法

  1. makeコマンドを実行して、サーバー、クライアント、GUIクライアントの実行ファイルを生成する。
make
  1. サーバーを任意のポートで起動します。
./server <port>
  1. 別のターミナルでクライアントを起動します。(多重起動可)
./client <host> <port>

または、GUIクライアントを起動します。

./client_gui <host> <port>

実行例

サーバに接続されました
あなたの名前は 'Client1' です。
利用可能なコマンドを表示するには ':help' を入力してください。
*** Client2 がチャットに参加しました ***
[Client1]> :name steve
名前を 'steve' に変更しました。
*** Client2 が alex に名前を変更しました ***
[steve]> hi
[alex]:(・∀・)ノ
[alex]: nice to meet you!
[steve]> 

実行可能なコマンドの一覧は以下の通り

  • :name <新しい名前> - 自分の名前を変更します。
  • :whoami - 自分の名前を確認します。
  • :members - サーバーに接続中の全クライアントの名前を確認します。
  • :help - 使用可能なコマンドの一覧を表示します。
  • :art <アート名> - 10種類のアスキーアートを表示します。
  • quit - チャットを終了します。

工夫点

  • Makefileを用いて、サーバー、クライアント、GUIクライアントのコンパイルを一括で行えるようにした。
  • 新しくクライアントが参加した際に、サーバーが参加中の全クライアントに参加メッセージを送信するようにした。
  • クライアント参加時にサーバー側が初期名を割り当て、クライアント側にその名前を通知するようにした。
  • 各メッセージに送信者の名前を表示するようにした。
  • :name <新しい名前> コマンドを実装し、クライアントが自分の名前を変更できるようにした。
  • :whoami コマンドを実装し、クライアントが自分の名前を確認できるようにした。
  • :members コマンドを実装し、サーバーに接続中の全クライアントの名前を確認できるようにした。
  • :help コマンドを実装し、使用可能なコマンドの一覧を表示できるようにした。
  • :art <アート名> コマンドを実装し、10種類の様々なアスキーアートを表示できるようにした。
  • 名前を変更した際に、サーバーが参加中の全クライアントに名前変更メッセージを送信するようにした。
  • クライアントが切断する際に、サーバーが参加中の全クライアントに退出メッセージを送信するようにした。
  • サーバーからのログ関係のメッセージラベルに色を付けて、視認性を向上させた。
  • コマンド関連の処理をcommands.hにまとめ、コードの可読性を向上させた。(DRY原則)
  • GTK+3を用いて、GUIクライアントを実装した。
  • テキストビューにメッセージ内容を表示する関数を実装し、コードの可読性を向上させた。(DRY原則)
  • GTK+3ではエスケープシーケンスが使用できないためメッセージ受信時にエスケープシーケンスを除去するようにした。
  • GUIクライアント内でテキストボックスに入力したメッセージを送信ボタンまたはEnterキーで送信できるようにした。
  • ウィンドウを閉じるボタンで通信を切断できるようにした。
  • すべてのクライアントが切断されたときにサーバーが終了するようにした。

About

送受信用のスレッドを用いて、最大クライアント数が10までの複数のクライアントが同時に接続できるチャットプログラム

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published