- Course: System Programming (Operating Systems focus)
- Tech Stack: C (POSIX sockets, pthreads), TCP/IP, semaphores, ANSI terminal controls
- Scope: Multi-room chat server + interactive terminal client with queued file transfers
- Why It Matters: Demonstrates low-level concurrency control, resource cleanup, and resilient client UX.
.
├── README.md # Bilingual project overview and runbook
├── LICENSE # MIT License · customize if needed
├── .gitignore # Keeps binaries/logs out of version control
├── Makefile # One-command build targets for client & server
├── client/
│ ├── client.c # Terminal UI, command parser, signal handling
│ └── client.h # Shared limits, prototypes, global state
├── server/
│ ├── server.c # Core server logic, room management, file queue
│ └── server.h # Public API, structures, constants
└── example_log.txt # Captured session proving end-to-end features
- Concurrent Connections: Up to 50 clients managed safely via mutex-protected arrays.
- Dynamic Chat Rooms: Auto-create, auto-clean, enforce 15-user capacity, retain recent members.
- Robust Messaging: Broadcast and whisper flows with defensive error reporting + logs.
- File Transfer Queue: Semaphore-throttled uploads, typed/size validation, conflict-aware renaming.
- Graceful Shutdown: SIGINT/SIGTERM handler broadcasts shutdown and deallocates all resources.
- Client UX: Colored server prompts, inline help, strict command syntax, Ctrl+C cleanup.
- Observability: Rich
chat_server.logentries (connect, command, file lifecycle, errors).
make # builds chatserver and chatclient using GCC/Clang
make clean # removes binaries, *.o, logs, temp files
-
Launch server
./chatserver 5001
-
Launch each client (new terminal/tab)
./chatclient 127.0.0.1 5001
-
Choose username: 1–15 alphanumeric characters → sent to the server at login.
-
Use commands (slash-prefixed):
Command Purpose /join <room>Join or create a room (alphanumeric, max 32 chars). /leaveLeave the current room; empty rooms auto-delete. /broadcast <msg>Message everyone in the active room. /whisper <user> <msg>Direct message any online user. /sendfile <path> <user>Queue file ≤3 MB (txt/pdf/jpg/png). /helpShow client command reference. /exitGracefully disconnect. -
Inspect logs:
chat_server.logandexample_log.txtshowcase real sessions.
- Ders: Sistem Programlama (İşletim Sistemleri odaklı)
- Teknolojiler: C (POSIX soketleri, pthreads), TCP/IP, semaforler, ANSI terminal kumandaları
- Kapsam: Sıra-kuyruklu dosya transferine sahip çok odalı sohbet sunucusu + terminal istemcisi
- Önemi: Düşük seviye eşzamanlılık yönetimi, kaynak temizliği ve dayanıklı istemci deneyimini gösterir.
.
├── README.md # Cift dilli tanitim ve kullanim dokumani
├── LICENSE # MIT Lisansi · gerekirse kendinize gore duzenleyin
├── .gitignore # Ikili dosyalari ve loglari git disinda tutar
├── Makefile # Tek komutla istemci ve sunucu derlemesi
├── client/
│ ├── client.c # Terminal arayuzu, komut ayrisimi, sinyal yakalama
│ └── client.h # Ortak sabitler ve fonksiyon bildirimleri
├── server/
│ ├── server.c # Sunucu mantigi, oda yonetimi, dosya kuyrugu
│ └── server.h # Veri yapilari ve genel API
└── example_log.txt # Tum ozellikleri gosteren kayitli oturum
- Eşzamanlı Bağlantılar: Mutex korumalı dizilerle 50 müşteriyi aynı anda yönetir.
- Dinamik Sohbet Odaları: Anında oluşur, boşalınca silinir, oda başına 15 kullanıcı sınırı vardır.
- Güçlü Mesajlaşma: Yayın/özel mesaj komutları ayrıntılı hata raporlaması ve loglarla desteklenir.
- Dosya Transfer Kuyruğu: Semafor tabanlı yükleme limiti, uzantı/boyut denetimi, isim çakışma çözümü.
- Zarif Kapanış: SIGINT/SIGTERM geldiğinde tüm kullanıcılara duyuru yapar ve kaynakları temizler.
- İstemci Deneyimi: Renkli sunucu mesajları, satır içi yardım, katı komut söz dizimi, Ctrl+C çıkışı.
- İzlenebilirlik:
chat_server.logtüm bağlantı, komut ve dosya hareketlerini kaydeder.
make # chatserver ve chatclient ikililerini olusturur
make clean # ikilileri, *.o dosyalarini ve loglari siler
-
Sunucuyu başlat
./chatserver 5001
-
Her istemci için yeni terminal aç
./chatclient 127.0.0.1 5001
-
Kullanıcı adı seç: 1–15 karakter, sadece harf/sayı.
-
Komutlar:
Komut Açıklama /join <oda>Odaya girer veya yeni oda açar (alfa-nümerik, azami 32). /leaveBulunduğun odadan ayrılır, oda boşsa otomatik silinir. /broadcast <mesaj>Odadaki herkese mesaj gönderir. /whisper <kullanıcı> <mesaj>Belirli bir kullanıcıya özel mesaj atar. /sendfile <dosya> <kullanıcı>3 MB altındaki txt/pdf/jpg/png dosyalarını kuyruğa ekler. /helpKomut listesini gösterir. /exitSistemden güvenli çıkış yapar. -
Kayıtları incele:
chat_server.logveexample_log.txtgerçek oturum çıktılarını içerir.
Maintainer / Geliştirici
Oguzhan Erdem Tekel · GitHub