Chat-Me
Asynchronous Multithreaded C++ LAN Chat Application with Chunked File Transfer
Project Domain
Systems & Network Programming
Execution Stage
Complete
Timeline / Year
2025–2026 · Systems & Networking
Repository & Code
GitHub Repository →Visual Documentation & Artifacts
Click any photo to enlargeEngineering with real-world constraints.
Chat-Me is a C++ client-server application engineered for real-time text messaging and binary file transfer across local area networks. The project demonstrates core systems programming concepts — asynchronous socket I/O, concurrent connection management, custom wire protocol design, and multi-threaded resource sharing — implemented without relying on high-level networking libraries that abstract these details away.
The networking foundation is built on modern asynchronous socket architecture using ASIO, implementing non-blocking I/O completion loops that allow the server to handle multiple simultaneous client connections without spawning a dedicated thread per client — a design that scales more gracefully than thread-per-connection architectures under load.
The client side presents an intuitive graphical user interface developed in Qt, making the application usable by non-technical users while the underlying systems implementation provides hands-on experience with the full network stack from raw socket operations through serialization, buffering, and delivery.
Learning Context & Implementation Approach
This project was developed as part of a university team assignment, with the core networking implementation done individually. The goal was to move beyond textbook networking theory and implement a working client-server system by applying concepts in real code.
The networking foundation was built by working through the MMO Client/Server Framework tutorials by David Barr (javidx9), coding alongside the tutorial with active debugging and understanding of each component rather than copying code passively. The framework was then adapted and extended to support the specific requirements of LAN-based chat — multiple simultaneous client connections, user presence, and reliable binary file transfer.
This approach of learning through implementation — understanding each architectural decision, debugging transport-layer issues, and adapting a general framework to a specific application — produced a working system alongside a genuine understanding of asynchronous networking internals.
Component Deep Dives
Qt Desktop Client (GUI)
│
▼
Custom Packet Framing Engine
(Type ID + Payload Length Header)
│
▼
ASIO Non-Blocking Sockets
│
▼
Multithreaded C++ Server
(Connection Pool + Chunked File I/O)Asynchronous I/O Architecture
The core networking layer uses ASIO's asynchronous I/O model rather than blocking synchronous sockets. In a synchronous design, each network operation (accept, read, write) blocks the calling thread until it completes — requiring either a dedicated thread per connection or complex manual state machines. Under ASIO, operations are initiated asynchronously and completion callbacks are invoked by an I/O context event loop when the operation finishes.
This allows the server to manage multiple simultaneous client connections from a small thread pool rather than spawning a thread per client. The main I/O loop runs in a background thread, processing completion events from all active connections. New connection accepts are posted back to the I/O context immediately after handling, keeping the server continuously receptive to incoming clients.
The asynchronous design is particularly important for file transfer: a large file transfer that would block a synchronous thread for several seconds becomes a sequence of async chunk-write completions interleaved with regular message processing, preventing any single file transfer from degrading responsiveness for other connected clients.
Explore Full Codebase on GitHub
Includes complete source code, installation instructions, launch files, and documentation.
Key Capabilities
ASIO Asynchronous Non-Blocking I/O
Event-driven completion-handler architecture serves multiple simultaneous client connections from a small thread pool, avoiding the scalability limits of thread-per-connection designs.
Custom Length-Prefixed Packet Framing
Fixed-size header encoding message type and payload length correctly reconstructs complete application-layer messages regardless of TCP stream segmentation behavior.
Binary Payload Serialization
Compact binary serialization of message payloads provides better throughput and smaller wire sizes than text-based serialization formats.
Chunked Streaming File Transfer
Files are streamed in fixed-size chunks tagged with sequence numbers and transfer IDs, enabling progress tracking, out-of-order reassembly, and mid-transfer error recovery.
Cross-Platform Qt Desktop Client
Native Qt GUI with real-time message stream, connected user list, file transfer progress indicators, and safe signal-slot cross-thread UI updates.
Server Connection Event Console
Dedicated C++ server terminal displays active connections, client identifiers, message routing events, and file transfer status for operational monitoring.
- [01]C++17
- [02]Boost.ASIO
- [03]Asynchronous I/O
- [04]Qt Desktop GUI
- [05]Custom Packet Framing
- [06]Multithreading
- [07]UDP/TCP
- [08]Chunked File Transfer
Other Selected Works
Autonomous Drone
A ROS2 autonomous-navigation stack for a DJI Tello: monocular ORB-SLAM3 for real-time visual SLAM with a custom depth-estimation and scale-recovery pipeline, plus occupancy mapping and exploration planning layers in active development.
Learn more →Deep Learning & Medical ImagingConditional Multimodal MRI Synthesis & Brain Tumor Segmentation
A two-model system combining a ResNet U-Net for multi-class brain tumor segmentation with a conditional diffusion model that synthesizes 4-modality MRI scans from masks. Led as a two-person project and trained on TPU.
Learn more →Computer Vision & Edge AIGesture-Controlled Drone
A real-time gesture-recognition pipeline controlling a DJI Tello in flight. Built on a self-collected dataset of 5,000+ hand-landmark samples, a feature-engineered classifier, and temporal smoothing for reliable control.
Learn more →