1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/RockChin-RFTX2

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README_cn.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 20:41 e1887c3

RFTX2 lib

README | 中文文档

项目结构

  • src — исходный код;
  • lib — зависимые библиотеки.

Разработка среды

jdk11 в среде vscode с использованием Java Extension.

Архитектура проекта

Пакеты

com.rftx.auth предоставляет интерфейс аутентификации при установлении соединения и по умолчанию способ проверки токена;
com.rftx.conn управляет соединением во время работы, а также передаёт соединение между потоками;
com.rftx.core представляет собой сервер и клиент в работе RFTX;
com.rftx.exception содержит классы исключений;
com.rftx.listener определяет интерфейс прослушивателя событий во время работы и реализуется на верхнем уровне;
com.rftx.util включает в себя набор утилит;
com.rftx.test содержит тестовые классы.

Вызываемые классы

com.rftx.core.RFTXHost определяет хост RFTX, который является обязательным для всех вызывающих объектов: клиент, сервер или оба одновременно. RFTXHost сохраняет все управляющие и передающие соединения, созданные RFTXServer или RFTXClient.
com.rftx.core.RFTXServer определяет программу сервера RFTX. Этот объект содержится в RFTXHost и создаётся указанным методом. RFTXServer является потоком, который после запуска блокируется для приёма соединений и сохраняет их в списке соединений RFTXHost.
com.rftx.core.RFTXClient определяет клиентскую программу RFTX. Этот объект также содержится в RFTXHost и создаётся указанным способом. RFTXClient включает метод connect(String addr, int port), который используется для подключения к RFTXServer, запущенному на указанном адресе и порту.

Концепция соединения

Один RFTXHost содержит объекты RFTXServer и RFTXClient. Эти объекты инициализируются определёнными методами. RFTXHost включает три списка соединений, которые хранят управляющие соединения, передающие соединения и неопределённые соединения. Все соединения, созданные RFTXClient или принятые RFTXServer в одном RFTXHost, сохраняются в соответствующих списках. Это означает, что соединения, управляемые RFTXServer и RFTXClient, будут совместно использоваться в одном RFTXHost.

  • Управляющее соединение: клиент активно подключается к серверу, после чего обе стороны создают управляющее соединение для отправки и получения команд файлов.
  • Передающее соединение: каждое передающее задание соответствует одному передающему соединению, которое используется для отправки и получения файлов и автоматически создаётся на нижнем уровне.
  • Неопределённое соединение: сервер принимает соединение и временно считает его неопределённым соединением. Впоследствии (по инициативе клиента) это соединение отправляет идентификатор, чтобы сообщить серверу свою личность.

Методы вызова

0. Создание объекта RFTXHost

Обычно в программе создаётся только один объект RFTXHost:

RFTXHost host = new RFTXHost("hostName"); // создание объекта RFTXHost с именем hostname
  • hostname используется для идентификации друг друга при соединении и отличается от токена. Он не будет проверен, а служит только для идентификации личности.
  • Можно вызвать методы initServer(int port) или initClient() объекта RFTXHost для инициализации объектов RFTXServer или RFTXClient внутри RFTXHost.
  • Перед использованием методов server или client необходимо вызвать метод init, иначе будет выброшено исключение NullPointerException.
  • В одном объекте RFTXHost можно создать только RFTXServer или только RFTXClient либо оба сразу.

1. Установление управляющего соединения

Сервер

Предполагается, что уже определён объект host: RFTXHost (это обязательно):

host.initServer(3000); // открытие порта 3000 на этом хосте как порт сервера RFTXServer
host.getAuthenticator().addValidToken("tester", "TestToken"); // добавление токена с именем tester и значением TestToken
host.server.start(); // запуск прослушивателя RFTXServer с помощью этого метода
  • Объект RFTXHost содержит только один объект RFTXServer. Повторный вызов initServer(int port) перезапишет ранее созданный RFTXServer и может привести к непредвиденным исключениям, особенно если server уже начал прослушивание.
  • Можно добавить любое количество действительных токенов. Клиентские соединения будут отправлять токен соединения клиента для проверки.
  • На нижнем уровне используются хэш-карты для хранения действительных токенов, что означает наличие только одного токена с одинаковым именем.

Клиент

Предполагается, что определён объект host: RFTXHost (обязательно):

host.initClient(); // инициализация объекта Client в объекте Host
host.getAuthenticator().setConnToken("TestToken"); // установка токена соединения для использования при подключении "TestToken"
host.client.connect("testserver.ts", 3000); // подключение клиента к testserver.ts через порт 3000
  • Помимо метода connect(), первые две строки постоянно изменяют свойства объекта host. После установки токена соединения каждый раз при подключении будет использоваться последний установленный токен.
  • Не существует метода освобождения объекта client в объекте host.
  • Если токен подключения не установлен или установленный токен не включён в список токенов сервера RFTXServer, соединение будет автоматически разорвано сразу после установления соединения.

2. Передача файлов

Отправка

host.post(String peerName, String taskToken, String localFile, String remoteFile);

  • peerName предоставляет имя хоста целевого объекта для определения цели.
  • taskToken является токеном этой задачи передачи.
  • localFile указывает на локальный файл, который будет отправлен.
  • remoteFile определяет путь и имя файла на удалённом компьютере.

Например:

host.post("testServer", "taskToken000", "product/jar/rftx.jar", "receive/rftx-lib.jar")

Получение

host.get(String peerName, String taskToken, String localFile, String remoteFile);

  • peerName предоставляет имя хоста источника для определения источника.
  • taskToken является токеном задачи получения.
  • localFile указывает файл назначения, расположенный локально.
  • remoteFile определяет путь и имя удалённого файла.

Обратите внимание, что порядок локальных файлов и удалённых файлов одинаков в обоих методах. Пожалуйста, различайте исходные файлы и целевые файлы.

Пример:

host.get("testServer", "taskToken000", "product/jar/rftx.jar", "receive/rftx-lib.jar")

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/RockChin-RFTX2.git
git@api.gitlife.ru:oschina-mirror/RockChin-RFTX2.git
oschina-mirror
RockChin-RFTX2
RockChin-RFTX2
main