Выполнение однорангового соединения — одноранговое соединение с сервером TurnJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Выполнение однорангового соединения — одноранговое соединение с сервером Turn

Сообщение Anonymous »

Я пишу приложение для одноранговой службы с сервером TURN, но пытаюсь его создать. Если я правильно понимаю, для успешного однорангового соединения с сервером TURN необходимо выполнить три шага.
  • Получить адрес ретрансляции с сервера TURN
  • Установить рукопожатие с удаленным сервером
  • Начать соединение
Я пробую и TCP, и UDP (надеюсь, что один из них будет работать), но, похоже, мне не удается пройти этап ретрансляции. Я не уверен, что это правильный подход. Любая помощь приветствуется.
Мой сервер TURN активен, учетные данные верны и активны. Используя библиотеку Ice4j от Jitsi, я создаю запрос на выделение с помощью MessageFactory.createAllocateRequest() и добавляю необходимые атрибуты. После отправки запроса я продолжаю получать ответ UNKOWN_MESSAGE.
Мой TCP-код находится в моем репозитории. Поскольку файлы большие, я добавил их сюда, в git. Найдите ссылку:
gitlink.
Ниже приведены небольшие фрагменты кода.
UDP

Код: Выделить всё

Request first = MessageFactory.createAllocateRequest();
first.putAttribute(AttributeFactory.createRequestedTransportAttribute(RequestedTransportAttribute.UDP));
first.putAttribute(AttributeFactory.createUsernameAttribute(USERNAME));
first.putAttribute(AttributeFactory.createRealmAttribute(relam.getBytes(StandardCharsets.UTF_8)));
first.putAttribute(AttributeFactory.createNonceAttribute(nonce.getBytes(StandardCharsets.UTF_8)));
// first.putAttribute(AttributeFactory.createMessageIntegrityAttribute(USERNAME));
TransactionID t1 =
stack.sendRequest(first, server, local, new AbstractResponseCollector() {
@Override
protected void processFailure(BaseStunMessageEvent event) {
System.out.println("First ALLOCATE failed: " + event.getMessage());
}

@Override
public void processResponse(StunResponseEvent event) {
System.out.println("First ALLOCATE success: " + event.getMessage());

}
});
Он никогда не достигает успеха. Это всегда дает мне сбой с исключением тайм-аута сокета, даже если сервер активен и прослушивает. Для UDP я использую библиотеку Ice4j.
TCP

Код: Выделить всё

byte[] secondAllocate = buildSecondAllocate(
transactionID2,
username,
challenge.realm,
challenge.nonce,
password
);

out.write(secondAllocate);
out.flush();

byte[] response2 = readStunMessage(in);

byte[] relay = extractRelayAddress(response2, transactionID2);
Здесь я также не могу извлечь адрес ретрансляции.
Большинство статей, с которыми я столкнулся, в основном посвящены серверам TURN или созданию собственных серверов TURN.
Пожалуйста, помогите мне понять, как я могу получить адрес ретрансляции с помощью Java, или дайте мне знать, что не так с моим подходом.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... urn-server
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»