このプロジェクトは、C言語でTCPソケット通信をするクライアント・サーバープログラムです。
.
├── .devcontainer/
│ └── devcontainer.json # devcontainer設定ファイル
├── server.c # サーバープログラム
├── client.c # クライアントプログラム
├── Makefile # ビルド用Makefile
└── README.md # このファイル
VS Codeで以下の手順を実行します:
- プロジェクトフォルダを開く
Ctrl+Shift+P(Mac:Cmd+Shift+P) でコマンドパレットを開く- "Dev Containers: Reopen in Container" を選択
- コンテナのビルドと起動を待つ
ターミナルで以下のコマンドを実行します:
makeこれで server と client の実行ファイルが生成されます。
ターミナル1で以下を実行:
./serverまたは
make run-serverサーバーがポート8080で起動し、クライアントからの接続を待ちます。
別のターミナル2を開き、以下を実行:
./clientまたは
make run-clientローカルホスト以外のサーバーに接続する場合:
./client 192.168.1.100- サーバーが起動してクライアントを待機
- クライアントが接続
- クライアントでメッセージを入力
- サーバーがメッセージを受信してエコーバック
exitを入力すると通信終了
- TCPサーバーを実装
- ポート8080で待ち受け
- 1つのクライアントと接続
- 受信したメッセージをそのまま返す(エコーサーバー)
- "exit"を受信すると終了
- TCPクライアントを実装
- デフォルトで127.0.0.1:8080に接続
- ユーザーからの入力を受け付けてサーバーに送信
- サーバーからの応答を表示
- "exit"を入力すると終了
-Wall: すべての警告を有効化-Wextra: 追加の警告を有効化-std=c11: C11標準を使用-g: デバッグ情報を含める
生成されたファイルを削除するには:
make cleanサーバーを再起動する際にこのエラーが出る場合は、以下を実行してポートを使用しているプロセスを確認:
lsof -i :8080必要に応じてプロセスをkillします:
kill -9 <PID>- サーバーが起動しているか確認
- ファイアウォールの設定を確認
- IPアドレスとポート番号が正しいか確認
server.c と client.c の以下の行を変更:
#define PORT 8080 // 希望のポート番号に変更#define BUFFER_SIZE 1024 // 希望のサイズに変更-
デバッグ: gdbを使ってプログラムの動作を追跡
gdb ./server
-
複数クライアント対応: サーバーをマルチスレッド化してみる
-
UDPプロトコル: SOCK_STREAMをSOCK_DGRAMに変更してUDP通信を実装
-
エラーハンドリング: より詳細なエラー処理を追加
-
プロトコル設計: 独自の通信プロトコルを実装