update:更新说明文件。
This commit is contained in:
		
							parent
							
								
									4268563ac8
								
							
						
					
					
						commit
						b00b7b91af
					
				
							
								
								
									
										42
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								README.md
									
									
									
									
									
								
							@ -1,29 +1,45 @@
 | 
				
			|||||||
# transm
 | 
					# transm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
一个简易的使用服务端(`transms`)作为中转中心,间接在两个客户端(`transmc`)之间传输文件的工具。
 | 
					一个简易的使用服务端(`tss`)作为中转中心,间接在两个客户端(`tsc`)之间传输文件的工具。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 简要说明
 | 
					# 一、简要介绍
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- `client`和`server`均为命令行端程序,无GUI。
 | 
					| 主要功能序号 | 简介                                                         |
 | 
				
			||||||
 | 
					| ------------ | ------------------------------------------------------------ |
 | 
				
			||||||
 | 
					| 1            | A端提交文件列表到服务端,B端可以从服务端查阅有哪些客户端提交的哪些任务,自行选择下载。 |
 | 
				
			||||||
 | 
					| 2            | A端可以提交一个下载任务文件给B端,B端会自动下载列表中的文件(可用作更新远端文件)。 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- `client`从`server`下载文件,如果本地有重复则覆盖。
 | 
					- `tss`和`tsc`均为命令行端程序,无GUI。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- 工作方式为`client A`端提交待传输的文件列表到`server`,`client B`端从`server`获取有哪些客户机提交的哪些任务,可以从中下载。
 | 
					- `tsc`从`tss`下载文件的时候,如果本地有已存在则会被**覆盖**(注意)。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- 上述以及下面示例图中的客户端`A`、`B`只是泛指,实际服务端程序支持任意个客户端同时连接和传输文件(尽管如此,代码还是限制了100个客户端)。
 | 
					- 介绍所指的客户端`A`、`B`是泛指,实际服务端程序支持任意个客户端相互之间**同时连接**和**同时传输**文件,吞吐瓶颈在服务端主机网络上。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 使用说明
 | 
					# 二、使用说明
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 1.程序使用
 | 
					## 1.程序启动
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- 对于服务端程序`transms`,绑定默认绑定`0.0.0.0`的`9898`端口,如果需要修改端口,使用`transms 9898`。
 | 
					- 对于服务端程序`tss`,绑定默认绑定`0.0.0.0`的`9898`端口,如果需要修改端口,使用参数启动,示例:`tss 9898`。
 | 
				
			||||||
- 对于客户端程序`transmc`,首次请直接启动,程序会在当前用户目录下(比如Win下是`C:\Users\Zhangsan`,Linux下是`/home/zhangsan/`)产生一个`transm.ini`配置文件,在此配置文件中修改服务端的`ip`和`port`,然后再重新使用`transmc`即可。
 | 
					- 对于客户端程序`tsc`,请使用`tsc --help`查看使用方式。
 | 
				
			||||||
- `Up`指令后面的文件名路径,如果是非全路径(即相对路径),程序会自动拼接到当前`transmc`工作目录(如`Up dira/test.txt`也是可以的)。
 | 
					- `Up`指令后面的文件名路径,如果是非全路径(即相对路径),程序会自动拼接到当前`tsc`工作目录(如`Up dira/test.txt`也是可以的)。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 2.命令使用
 | 
					## 2.命令使用(截图可能过时,但使用方式大致如此)
 | 
				
			||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Update功能
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					命令格式为:`Update 客户端标号 列表文件`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`Update`的提交的列表文件格式为`txt`,内容为每一行格式是`A|B`,其中`A`为提交端的文件路径,`B`为要放到下载端的哪个目录 **(下载端必须存在这个目录,否则下载端拒绝自动下载)**。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					示例执行:`Update 1 l.txt`,其中`l.txt`内容示例如下。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```c++
 | 
				
			||||||
 | 
					D:/文件/abc.zip|/home/zhangsan/downlaod
 | 
				
			||||||
 | 
					D:/截图/Ni.jpg|/home/zhangsan/picture
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 注意
 | 
					# 注意
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- 如果两个`transmc`客户端在同一台机器上同时收发同一个文件将导致文件丢失损坏。
 | 
					- 如果两个`tsc`客户端在同一台机器上同时收发同一个文件将导致文件丢失损坏。
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										38
									
								
								test1.cpp
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								test1.cpp
									
									
									
									
									
								
							@ -1,38 +0,0 @@
 | 
				
			|||||||
#include "util.h"
 | 
					 | 
				
			||||||
#include <iostream>
 | 
					 | 
				
			||||||
#include <net_base.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    CFrameBuffer* buf = new CFrameBuffer();
 | 
					 | 
				
			||||||
    buf->data_ = new char[256];
 | 
					 | 
				
			||||||
    std::memset(buf->data_, 0x0, 256);
 | 
					 | 
				
			||||||
    int buf_len = std::snprintf(buf->data_, 256, "%s", "Hello Cplusplus.");
 | 
					 | 
				
			||||||
    buf->len_ = buf_len;
 | 
					 | 
				
			||||||
    char* data = nullptr;
 | 
					 | 
				
			||||||
    int len = 0;
 | 
					 | 
				
			||||||
    if (!CTransProtocal::pack(buf, &data, len)) {
 | 
					 | 
				
			||||||
        delete buf;
 | 
					 | 
				
			||||||
        return -1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    auto logger = get_logger("test1", "test1.log");
 | 
					 | 
				
			||||||
    asio::io_context io_context;
 | 
					 | 
				
			||||||
    CTcpClient client(io_context, logger);
 | 
					 | 
				
			||||||
    if (!client.connect("127.0.0.1", "8080")) {
 | 
					 | 
				
			||||||
        return -1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    logger->info("send len:{}", len);
 | 
					 | 
				
			||||||
    std::cout << client.send(data, len) << std::endl;
 | 
					 | 
				
			||||||
    std::thread t([&io_context]() { io_context.run(); });
 | 
					 | 
				
			||||||
    char line[512]{};
 | 
					 | 
				
			||||||
    while (std::cin.getline(line, 512)) {
 | 
					 | 
				
			||||||
        if (std::strstr(line, "end")) {
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    client.disconnect();
 | 
					 | 
				
			||||||
    t.join();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    delete buf;
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										38
									
								
								test2.cpp
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								test2.cpp
									
									
									
									
									
								
							@ -1,38 +0,0 @@
 | 
				
			|||||||
#include <net_base.h>
 | 
					 | 
				
			||||||
#include <util.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
std::shared_ptr<spdlog::logger> g_Logger;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void TestHandle(CFrameBuffer* buf)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    std::string chinese_test("中文测试");
 | 
					 | 
				
			||||||
    g_Logger->debug("type: {}", static_cast<int>(buf->type_));
 | 
					 | 
				
			||||||
    g_Logger->info("len: {}", buf->len_);
 | 
					 | 
				
			||||||
    g_Logger->warn("{} exec. {} 1", __FUNCTION__, chinese_test);
 | 
					 | 
				
			||||||
    g_Logger->error("{} exec. {} 2", __FUNCTION__, chinese_test);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // setlocale(LC_ALL, ".utf-8");
 | 
					 | 
				
			||||||
    char buffer[] = "Java";
 | 
					 | 
				
			||||||
    g_Logger = get_logger("test1", "test1.log");
 | 
					 | 
				
			||||||
    asio::io_context io_context;
 | 
					 | 
				
			||||||
    std::shared_ptr<CTcpClient> client = std::make_shared<CTcpClient>(io_context, g_Logger);
 | 
					 | 
				
			||||||
    if (!client->connect("127.0.0.1", "8080")) {
 | 
					 | 
				
			||||||
        return -1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    //client->send(buffer, sizeof(buffer));
 | 
					 | 
				
			||||||
    client->register_func([](CFrameBuffer* buf) { TestHandle(buf); });
 | 
					 | 
				
			||||||
    client->async_recv();
 | 
					 | 
				
			||||||
    std::thread t([&io_context]() { io_context.run(); });
 | 
					 | 
				
			||||||
    char line[512]{};
 | 
					 | 
				
			||||||
    while (std::cin.getline(line, 512)) {
 | 
					 | 
				
			||||||
        if (std::strstr(line, "end")) {
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    client->disconnect();
 | 
					 | 
				
			||||||
    t.join();
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user