# transm

一个简易的使用服务端(`tss`)作为中转中心，间接在两个（多）客户端(`tsc`)之间传输文件的工具。

平台支持：`Windows`、`Linux`、`MacOS`、`Termux`、`iPhone iSh`及理论上其他任意支持`c++17`标准编译器的平台。

低版本编译器，可选择`boost`+`c++11`标准组合。

**注**：使用安装包的用户，如果想变更安装位置的话，请先卸载旧版本（原位置更新最新版不用卸载）。

# 一、说明

**注意:** 当前说明文档仅针对`v1.4.1`及其以后的版本，此前的版本需要检出对应`tag`的`README.md`或者下载对应发布版本的源码，然后解压其中的`README.md`。

服务端程序支持任意个客户端相互之间**同时连接**和**同时传输**文件，吞吐瓶颈在服务端主机网络上。

- `tss`和`tsc`均为命令行端程序，无GUI。

## 一些特点（基于最新版本）

- 通配符传输。
- 广泛的平台支持。
- 终端自动文件补全。
- 自动检测对方掉线。
- 极小的、单个文件。
- 支持相对路径处理。
- 单端可以操作下载发送。
- 支持单客户端操作收发本地文件。
- 多客户端可以同时互相收发文件。
- 服务端仅转发数据，不存储数据。
- 运行时无其他三方二进制库依赖。
- `Linux`到`Linux`文件传输保留原权限。
- 干净，不会在客户机环境到处遗留临时文件。
- 临时公网传输，无需使用三方需要登陆软件。
- 服务端自我安全防御（若部署到云端防止常规攻击）。
- 支持拒绝同时操作同设备同路径文件，防止文件内容丢失。

# 二、使用说明

## 1.程序启动

- 对于服务端程序`tss`，绑定默认绑定`0.0.0.0`的`9898`端口，如果需要修改端口，使用参数启动，示例：`tss 9898`。
- 对于客户端程序`tsc`，请使用`tsc --help`查看使用方式。

## 2.使用

`tsc`连接到服务端`tss`后，可以输入`h`查看所有指令的具体介绍。

![tsc](https://www.sinxmiao.cn/taynpg/transm/raw/branch/main/img/tsc_use.png)

## 3.介绍补充

- 需要传入存储路径的指令，如果未填写，默认`tsc`当前工作目录。
- `任务文件`格式统一为`UTF-8`编码。
- 支持相对路径处理。
- `UpTask`和`DownTask`指令`任务文件`格式完全一致，均为左文件，右目录，尽管是下载别人文件，目的是为了支持同一个任务文件既可以发也可以收。

具体`任务文件`内容格式如下（左侧发送端，右侧接受端），内容支持变量：

- ${HOME}，用户目录（发送端接收端均支持）。
- ${CURRENT}，任务文件所在目录（该变量仅支持发送端，也就是`|`左侧，因为接收端没有任务文件所在路径）

```txt
${HOME}/截图/Ni.jpg|${HOME}/dira
${CURRENT}/xxx.zip|D:\
```

### 3.1 版本内容补充

- `v1.5.0`：支持数据加密解密（会影响速度），并且可以设置传输时`是否`需要加密（默认加密）。

```c++
/*
测试环境 ==>
Microsoft Windows 10 Professional (x64) Build 19045.5608 (22H2)
13th Gen Intel(R) Core(TM) i5-13500H 3200.0 MHz

Debug模式 tinyaes 加密解密测试速度：
=========================================
File size: 630239232 bytes (601.043 MB)
Effective block size: 102384 bytes
Total encryption time: 41887336 μs (14.349 MB/s)
Total decryption time: 41822620 μs (14.3712 MB/s)
Data verification: PASSED
=========================================
Release模式 tinyaes 加密解密测试速度：
=========================================
File size: 630239232 bytes (601.043 MB)
Effective block size: 102384 bytes
Total encryption time: 8367460 μs (71.831 MB/s)
Total decryption time: 8150036 μs (73.7473 MB/s)
Data verification: PASSED
=========================================
*/
```

# 三、编译

当前项目支持`cmake`构建工具。

```shell
git clone --recursive https://www.sinxmiao.cn/taynpg/transm
```

## 1.常规编译

cmake：`cmake -Bbuild -DCMAKE_BUILD_TYPE=Release`、`cmake --build build --config Release`。

## 2.XP系统编译

### 前提

- 支持`XP`的`msvc`编译器不支持新`C++语法标准`，故使用`mingw32`编译器。
- 支持`xp`的`mingw32`编译器的`c++17`标准的`filesystem`模块还是实验性质且有编译`BUG`，故使用`boost-filesystem`。
- 需要一个最低`3.16`版本的`cmake`。

### 编译

请参照：`xp_build.bat`。
