# TermTCP - Command Line TCP Terminal Client A lightweight, zero-dependency command-line TCP client for connecting to TCP servers and BBS systems. ## Features - ✅ **Minimal Dependencies** - No GUI libraries, just standard C POSIX - ✅ **Multiple Host Support** - Store and quickly connect to configured hosts - ✅ **Session Logging** - Automatic timestamped logging of all traffic - ✅ **Color Output** - Optional ANSI color for better readability - ✅ **Non-blocking I/O** - Responsive input/output handling - ✅ **Command System** - Built-in commands for connection management - ✅ **Configuration File** - Easy setup via ~/.termtcprc - ✅ **Lightweight** - Single C file, ~400 lines ## Quick Start ### Build ```bash make -f Makefile_CLI ./termtcp ``` ### First Run The application will create `~/.termtcprc` with default configuration. ### Connect ``` > connect 0 # Connect to first configured host > list # Show all configured hosts > status # Show connection status ``` ### Send Data ``` > Type anything here (not starting with /) to send to server > Hello, BBS! # Sends "Hello, BBS!\r" ``` ### Disconnect ``` > disconnect # Close connection > quit # Exit the application ``` ## Configuration Edit `~/.termtcprc` to add hosts: ``` # Format: host port name # Comments start with # localhost 8011 Local BBS example.com 8011 Remote BBS bbs.example.net 9000 Another System ``` ## Commands ### Connection Commands ``` connect [N] - Connect to host N (default: 0) disconnect - Close current connection status - Show connection status list - List all configured hosts ``` ### Session Commands ``` log on - Enable session logging log off - Disable logging color on - Enable colored output color off - Disable colored output ``` ### Help & Exit ``` help - Show command list quit - Disconnect and exit exit - Same as quit ``` ## Command-Line Options ``` termtcp [OPTIONS] Options: -c, --connect N Auto-connect to host N on startup -l, --log Enable logging on startup -n, --no-color Disable colored output -h, --help Show help message ``` ## Examples ### Connect and Log Automatically ```bash termtcp -c 0 -l # Connects to host 0 and starts logging ``` ### No Color Mode ```bash termtcp -n # Runs without ANSI colors ``` ### Standard Usage ```bash termtcp # Starts interactive, allows manual connection ``` ## Logging When logging is enabled: - Creates timestamped log files in current directory - Format: `hostname_port_YYYYMMDD_HHMMSS.log` - Records both sent and received data with timestamps - Automatic log opening when connecting - Use `log off` to disable Example log entry: ``` [14:35:22] SEND: Hello, World [14:35:23] RECV: Welcome to the system! ``` ## Building ### Dependencies - GCC or Clang - POSIX-compliant system (Linux, macOS, BSD) - Standard C library ### Compilation ```bash # Standard build gcc -Wall -O2 -o termtcp termtcp_cli.c # Or use Makefile make -f Makefile_CLI ``` ### Make Targets ``` make -f Makefile_CLI build # Build make -f Makefile_CLI run # Build and run make -f Makefile_CLI debug # Debug build make -f Makefile_CLI install # Install to /usr/local/bin/ make -f Makefile_CLI clean # Remove artifacts ``` ## Usage Patterns ### Simple Connection ```bash $ termtcp > list Configured Hosts: [0] localhost:8011 - Local BBS [1] example.com:8011 - Remote BBS > connect 0 Connecting to localhost:8011... Connected to: Local BBS [Status] Connected to localhost:8011 > help Available Commands: connect [host#] - Connect to a host (default: 0) ... > Hello there! ``` ### Scripted/Automated Connection ```bash # Auto-connect and log termtcp -c 0 -l # Non-interactive, pipe commands echo -e "connect 0\nQUERY\nquit" | termtcp ``` ### Session Logging for Support ``` > log on > [do something that fails] > log off # Now you have a complete log to send to support ``` ## Configuration File Format The `~/.termtcprc` file is simple text format: ``` # Comments start with # # Empty lines are ignored # Format: hostname port shortname # BBS Systems bbs1.example.com 9000 BBS One bbs2.example.com 9000 BBS Two # Local Services localhost 3000 Local Dev 192.168.1.10 8080 Lab Server # Remote Services production.example.com 443 Production ``` Notes: - Hostname: Can be IP or FQDN - Port: Numeric port number (1-65535) - Shortname: Display name, no spaces ## Troubleshooting ### "Connection timeout" - Check hostname/IP is correct - Check port number is correct - Verify the server is running - Check firewall settings ### "Connection refused" - Server is not listening on that port - Check port number - Server may be down ### "Failed to resolve hostname" - Check DNS configuration - Try using IP address instead - Check hostname spelling ### Terminal appears frozen - Press Ctrl+C to interrupt - Type `quit` and Enter to exit gracefully ### Characters not displaying - Try `color off` if color codes appear - Check terminal encoding (should be UTF-8) ## Performance - **Memory Usage**: ~50KB - **CPU Usage**: Minimal (event-driven) - **Binary Size**: ~40KB (stripped) - **Startup Time**: <100ms - **Max Line Length**: 512 bytes ## Technical Details ### Implementation - Single-threaded event loop using `select()` - Non-blocking socket I/O - Raw terminal mode for responsive input - Efficient circular buffering for display ### Compatibility - **Linux**: Full support - **macOS**: Full support - **BSD**: Full support - **Windows**: Possible with Cygwin/WSL ### Signal Handling - SIGTERM: Graceful shutdown - SIGINT (Ctrl+C): Immediate exit ## Limitations - Maximum line length: 512 characters - Maximum hosts in config: 5 - Single connection at a time - No TLS/SSL support (use tools like `openssl s_client` for secure connections) - No proxy support (use SSH tunneling instead) ## Future Enhancements - [ ] IPv6 support - [ ] Scripting/automation interface - [ ] Terminal scrollback buffer - [ ] Search in history - [ ] Aliases for commands - [ ] Custom prompt configuration - [ ] Binary mode (for file transfer) ## Comparison: CLI vs GTK3 Version | Feature | CLI | GTK3 | |---------|-----|------| | Dependencies | None | GTK3 dev files | | Binary Size | 40KB | 500KB+ | | Memory | 50KB | 20MB+ | | Startup | <100ms | 500ms+ | | GUI | No | Yes | | Multiple Connections | No | Yes (planned) | | Port Monitoring | No | Yes | | Scripting | Yes | No | | Configuration | .termtcprc | GUI + ini file | ## Installation ### From Source ```bash git clone cd termtcp make -f Makefile_CLI install termtcp ``` ### Pre-built (if available) ```bash sudo apt install termtcp # Ubuntu/Debian sudo dnf install termtcp # Fedora ``` ## Creating a Desktop Entry On Linux, create `~/.local/share/applications/termtcp.desktop`: ```ini [Desktop Entry] Type=Application Name=TermTCP Exec=gnome-terminal -- termtcp Terminal=true Categories=Utility;Network; ``` ## Examples & Use Cases ### Connect to a BBS ```bash # Edit ~/.termtcprc with BBS addresses termtcp > connect 0 > help ``` ### System Monitoring ```bash # Check system metrics from a remote server termtcp -c 0 > STATUS > QUERY ``` ### Testing TCP Services ```bash # Quick test of a TCP service termtcp -c 0 > HELLO > [see response] > quit ``` ### Log Everything for Debugging ```bash termtcp -l > connect 0 > [do something] > log on > [reproduce issue] > log off ``` ## Getting Help - Type `help` in the application - Check ~/.termtcprc for configuration examples - Review this README - Check application output for error messages ## License Same as TermTCP project. ## Version History - **v1.0.0** (2026-06-23) - Initial CLI release - Basic TCP connectivity - Command system - Session logging - Configuration file support --- **TermTCP CLI** - Lightweight TCP terminal client for power users. Start with: `make -f Makefile_CLI && ./termtcp`