You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
TermTCP/README_CLI.md

399 lines
7.8 KiB

# 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 <repo>
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`

Powered by TurnKey Linux.