Skip to content

tarinaihitori/socket-programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

このプロジェクトは、C言語でTCPソケット通信をするクライアント・サーバープログラムです。

構成ファイル

.
├── .devcontainer/
│   └── devcontainer.json  # devcontainer設定ファイル
├── server.c               # サーバープログラム
├── client.c               # クライアントプログラム
├── Makefile              # ビルド用Makefile
└── README.md             # このファイル

セットアップ

1. devcontainerで開く

VS Codeで以下の手順を実行します:

  1. プロジェクトフォルダを開く
  2. Ctrl+Shift+P (Mac: Cmd+Shift+P) でコマンドパレットを開く
  3. "Dev Containers: Reopen in Container" を選択
  4. コンテナのビルドと起動を待つ

2. プログラムのビルド

ターミナルで以下のコマンドを実行します:

make

これで serverclient の実行ファイルが生成されます。

使い方

サーバーの起動

ターミナル1で以下を実行:

./server

または

make run-server

サーバーがポート8080で起動し、クライアントからの接続を待ちます。

クライアントの起動

別のターミナル2を開き、以下を実行:

./client

または

make run-client

ローカルホスト以外のサーバーに接続する場合:

./client 192.168.1.100

通信の流れ

  1. サーバーが起動してクライアントを待機
  2. クライアントが接続
  3. クライアントでメッセージを入力
  4. サーバーがメッセージを受信してエコーバック
  5. exit を入力すると通信終了

プログラムの説明

server.c

  • TCPサーバーを実装
  • ポート8080で待ち受け
  • 1つのクライアントと接続
  • 受信したメッセージをそのまま返す(エコーサーバー)
  • "exit"を受信すると終了

client.c

  • TCPクライアントを実装
  • デフォルトで127.0.0.1:8080に接続
  • ユーザーからの入力を受け付けてサーバーに送信
  • サーバーからの応答を表示
  • "exit"を入力すると終了

コンパイルオプション

  • -Wall: すべての警告を有効化
  • -Wextra: 追加の警告を有効化
  • -std=c11: C11標準を使用
  • -g: デバッグ情報を含める

クリーンアップ

生成されたファイルを削除するには:

make clean

トラブルシューティング

"Address already in use" エラー

サーバーを再起動する際にこのエラーが出る場合は、以下を実行してポートを使用しているプロセスを確認:

lsof -i :8080

必要に応じてプロセスをkillします:

kill -9 <PID>

接続できない

  1. サーバーが起動しているか確認
  2. ファイアウォールの設定を確認
  3. IPアドレスとポート番号が正しいか確認

カスタマイズ

ポート番号の変更

server.cclient.c の以下の行を変更:

#define PORT 8080  // 希望のポート番号に変更

バッファサイズの変更

#define BUFFER_SIZE 1024  // 希望のサイズに変更

学習のヒント

  1. デバッグ: gdbを使ってプログラムの動作を追跡

    gdb ./server
  2. 複数クライアント対応: サーバーをマルチスレッド化してみる

  3. UDPプロトコル: SOCK_STREAMをSOCK_DGRAMに変更してUDP通信を実装

  4. エラーハンドリング: より詳細なエラー処理を追加

  5. プロトコル設計: 独自の通信プロトコルを実装

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors