Skip to content

Cyanlament/TCP-based-socket-programming-case-conv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TCP 套接字编程

  • 基础功能:客户端发送文本,服务器返回大写形式。
  • 退出流程:客户端发送 quit 后关闭当前连接。
  • 多客户端并发:服务器为每个客户端创建独立处理线程。
  • 文件传输:客户端发送 FILE demo.txtGETFILE demo.txt,服务器读取 files/demo.txt 并返回内容。
  • GUI 客户端:C++ 版提供 Win32 原生 GUI,Rust 版提供 egui GUI。
  • GUI 服务端:C++ 版提供 Win32 原生 GUI,Rust 版提供 egui GUI。
  • 地址设置:客户端 GUI 均提供服务器 IP/主机名与端口输入框。
  • 文档:每个版本都有 README。

项目结构

lab2-tcp-socket-chat/
  README.md
  files/demo.txt
  docs/
    protocol.md
  cpp-chat/
    CMakeLists.txt
    README.md
    files/demo.txt
    scripts/
      build_linux.sh
      build_windows.ps1
      build_windows_mingw.ps1
    src/
      common.hpp
      server.cpp
      client_cli.cpp
      client_gui_win32.cpp
      server_gui_win32.cpp
      win32_compat_server.cpp
      win32_compat_client.cpp
      win32_compat_server_gui.cpp
      win32_compat_client_gui.cpp
  rust-chat/
    Cargo.toml
    README.md
    files/demo.txt
    src/
      common.rs
      lib.rs
      bin/
        server.rs
        server_gui.rs
        client.rs
        test_case.rs

协议约定

所有请求和响应均为 UTF-8 文本行,以 \n 结尾。

客户端请求 服务器行为
普通文本,例如 hello 返回大写:HELLO
quit 关闭当前客户端连接
FILE <filename> 从服务器端 files/ 目录读取文本文件并返回
GETFILE <filename> FILE <filename> 相同

出于安全考虑,文件名不允许包含 ../\,避免访问 files/ 目录之外的文件。

快速运行

C++ 版

Windows 上推荐先用这两个一键脚本:

cd lab2-tcp-socket-chat\cpp-chat
start_server_wsl.bat

另开一个终端:

cd lab2-tcp-socket-chat\cpp-chat
start_client_demo_wsl.bat

Linux / WSL 下可构建和验证 CLI 版本:

cd lab2-tcp-socket-chat/cpp-chat
bash scripts/build_linux.sh
./build/cpp_chat_server 20245 files

另开一个终端:

cd lab2-tcp-socket-chat/cpp-chat
./build/cpp_chat_client_cli 127.0.0.1 20245 --demo

如果你在 Windows PowerShell 中运行了 bash scripts/build_linux.sh,生成的是 WSL/Linux 程序,不能直接用 PowerShell 执行 ./build/cpp_chat_server。你当前机器可以直接走 Windows 原生 MinGW 构建:

cd lab2-tcp-socket-chat\cpp-chat
.\scripts\build_windows_mingw.ps1
.\build-win\cpp_chat_server.exe 20245 files

另开一个 PowerShell:

cd lab2-tcp-socket-chat\cpp-chat
.\build-win\cpp_chat_client_cli.exe 127.0.0.1 20245 --demo

GUI 版本:

cd lab2-tcp-socket-chat\cpp-chat
.\build-win\cpp_chat_server_gui.exe
.\build-win\cpp_chat_client_gui.exe

服务端 GUI 的 File dirfiles。客户端和服务端在同一台电脑上时 Host 填 127.0.0.1,局域网其他设备访问这台电脑时填 192.168.0.178

也可以改用 WSL 包装脚本:

cd lab2-tcp-socket-chat\cpp-chat
.\scripts\run_server_wsl.ps1 20245 files

另开一个 PowerShell:

cd lab2-tcp-socket-chat\cpp-chat
.\scripts\run_client_wsl.ps1 127.0.0.1 20245 --demo

如果给同一局域网内其他主机访问,本机服务器地址使用:192.168.0.178

Windows 下可构建 GUI 版本:

cd lab2-tcp-socket-chat\cpp-chat
.\scripts\build_windows.ps1
.\build\Release\cpp_chat_server_gui.exe
.\build\Release\cpp_chat_client_gui.exe

Rust 版

cd lab2-tcp-socket-chat/rust-chat
cargo run --bin server -- 0.0.0.0:20245 files

另开一个终端运行 GUI 客户端或自动测试:

cargo run --bin client
cargo run --bin test_case -- 127.0.0.1 20245

本机局域网测试地址:192.168.0.178

Rust GUI 服务端:

cargo run --bin server_gui

About

simple C++ and Rust program conversing case with GUI.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors