Systems & Network Programming·PROJECT 06·Complete
2025–2026 · Systems & Networking

Chat-Me

Asynchronous Multithreaded C++ LAN Chat Application with Chunked File Transfer

C++17Boost.ASIOAsynchronous I/OQt Desktop GUICustom Packet FramingMultithreadingUDP/TCPChunked 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 enlarge
01 / Overview & Systems Architecture

Engineering 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.

02 / Motivation

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.

03 / System Architecture & Mechanics

Component Deep Dives

System Topology & Pipeline
DATAFLOW
         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)
Subsystem 01 of 04TECHNICAL BRIEF

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.

1 / 4
Open Source Repository · Code & Docs

Explore Full Codebase on GitHub

Includes complete source code, installation instructions, launch files, and documentation.

View Repository →
Core Engineering

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.

Technologies & Frameworks
  • [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
Explore More Projects

Other Selected Works

Back to Overview →