Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Ваши проекты _ Проблемы с общением хаб--клиент

Автор: keyviewer 29.8.2014, 16:59

Добрый день, решил изучить протокол NMDC и быстренько проверить свои знания.
Использовал сначала python третей ветки, но столько костылей пришлось делать...
Перешел на вторую. Но не получается пройти дальше по плану!

CODE
# -*- coding: utf-8 -*-
import socket,re
nmdc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
nmdcServer = "192.168.0.2"
nmdcPort = 411
nmdc.connect((nmdcServer, nmdcPort))
def senD(data):
print u'Клиент > ',data[:40]
nmdc.send(data)
def L2K(lock):
lock = re.findall('\$Lock[\s](.*?)[\s]', lock)[0]
key = {}
for i in xrange(1, len(lock)):key[i] = ord(lock[i]) ^ ord(lock[i-1])
key[0] = ord(lock[0]) ^ ord(lock[len(lock)-1]) ^ ord(lock[len(lock)-2]) ^ 5
for i in xrange(0, len(lock)):key[i] = ((key[i]<<4) & 240) | ((key[i]>>4) & 15)
out = ""
for i in xrange(0, len(lock)):out += unichr(key[i])
out = out.replace(u'\0', u'/%DCN000%/').replace(u'\5',u'/%DCN005%/').replace(u'\44', u'/%DCN036%/')
out = out.replace(u'\140', u'/%DCN096%/').replace(u'\174',u'/%DCN124%/').replace(u'\176', u'/%DCN126%/')
return out.encode('utf-8')
BR=0
while True:
data = nmdc.recv(2048)
print u'Хаб > ',data
#if "$Lock" in data:
# senD("$Key %s|$ValidateNick %s|" % (L2K(data), 'test')) РАЗРЫВ СОЕДИНЕНИЯ!
if "$Lock" in data:
senD("$Supports QuickList|$Key %s|" % (L2K(data)))
if data == '':# защита от принтовки пустых строк при разрыве соединения
BR+=1
if BR==10:break
"""
Хаб: --> $Lock [Код] Pk=[PrimaryKey]|
Клиент: --> $Key [Рассчитанный_ключ]|$ValidateNick [Ник]|
Хаб: --> $HubName [Имя_хаба]|$Hello [Ник]|
Клиент: --> $Version [Версия]|$GetNickList|$MyINFO [Строка]|
Хаб: --> Отсылает список пользователей.
"""

Сначала думал, что может ключ неверный, но при отправки senD("$Supports QuickList|$Key %s|" % (L2K(data)))
Получал: $Supports QuickList| 20
Значит с ним все в порядке, я уже не знаю... Может что-то не так с "$Key %s|$ValidateNick %s|"
Помогите пожалуйста разобраться с ним.

Автор: Nickolya 30.8.2014, 21:34

Не знаю, сильно ли помогу. Может я уже сильно отстал от хабов, но:
1. хабы работают не в утф (поправьте, если уже не так)
2. очень поможет описанные тут примеры: http://mydc.ru/topic915.html
3. есть готовые примеры на пхп, можете на них опираться (искать на форуме), как пример: http://mydc.ru/topic4961.html

Автор: keyviewer 30.8.2014, 23:59

Цитата(Nickolya @ 30.8.2014, 22:34) *
Не знаю, сильно ли помогу. Может я уже сильно отстал от хабов, но:
1. хабы работают не в утф (поправьте, если уже не так)
2. очень поможет описанные тут примеры: http://mydc.ru/topic915.html
3. есть готовые примеры на пхп, можете на них опираться (искать на форуме), как пример: http://mydc.ru/topic4961.html

Я кстати это тоже подозреваю, но странно то, что при quick ключ подходит, хотя он закодирован в UTF-8, надо еще потестить мне, потом отпишусь о результатах!
Спасибо за ответ =)
Я брал оттуда инфу как раз таки, кстати в http://mydc.ru/topic915s40.html?p=19477#entry19477 для питона имеются символы как: u'', что означает кодировку именно в UTF
Странно это как-то...

Автор: Setuper 31.8.2014, 9:38

Обратите внимание на характеристику QuickList.
Если хаб поддерживает данную характеристику, и вы отсылаете её на хаб, то последовательность входа немного другая. В частности, на хаб не следует отсылать команду $ValidateNick.

см. http://mydc.ru/topic915.html

Автор: Alexey 31.8.2014, 19:08

Цитата(keyviewer @ 31.8.2014, 0:59) *
странно то, что при quick ключ подходит, хотя он закодирован в UTF-8

Если тестируется на птоке, то там правильность ключа не проверяется у клиентов, поддерживающих расширения протокола.

Автор: keyviewer 31.8.2014, 23:14

Спасибо, подумаю еще, но попозже, недельки через две. Просто счастлив буду если все с ходу получиться, конечно, перед этим начитавшись документации и вдохновленный новыми силами на подвиги super_man.gif
И да, просто безумно рад, что документация у Вас на русском языке и причем полная! Порой забугорные читать противно, но они содержат много всего полезного =)

Автор: Saymon21 23.9.2014, 21:30

Полная документация по nmdc протоколу? Есть тут же на форуме.
Кстати. У меня тут есть запил nmdc пингера на питоне втором. Ваял как-то давным на досуге. Нельзя отнести к стейблу, но работал нормально с ptokax, verlihub, rushub. C flexhub были проблемы. Дальше не помню тестировал или нет. Допиливать там надо тоже не мало, и ваще лучше перевести на какой нить twisted. Щас там голый сокет. Могу как нить куда нить скинуть.

зы. Полурабочий самопальный адц пингер есть на питоне даже.