Вопросы по протоколу NMDC, Делаю программу |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы по протоколу NMDC, Делаю программу |
14.12.2014, 4:56
Сообщение
#1
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Делаю программу, работающую по этому протоколу.
Нужен поиск по TTH и скачивание найденного файла. Помогите разобраться с протоколом. Я уже научился авторизовываться на хабе. Т.е. посылаю вычисленный ключ и $MyInfo. Тут всё хорошо пока что. Теперь мне нужен поиск по TTH. Для этого посылаю: $Search Hub:Master256 F?T?0?9?TTH:7FZEBBKAWID5QSOX5DQFDZS6CXPCBV63RPNUCTA| Вопрос вот в чём: Вот я послал это хабу. И что дальше??? Как мне принять ответ??? На мой сокет поступает огромное количество данных. Т.е. я правильно понимаю, что нужно парсить эти данные??? Но что в них искать? Я никак не могу победить кодировку данных. Соединяюсь с хабом dc.filimania.com:411. Код на Java у меня. Преобразую так key=new String(p2preq, "windows-1251"); В ответе изредка появляется текст на русском и английском. А остальное - это кракозябры. Регулярно парсится мой ник. Как я понял это передаётся список ников постоянно. Вот весь код Код String key=""; Socket sckServer1 = new Socket(); try { sckServer1.connect(p2padrr); sckServer1.getInputStream().read(p2preq); key=new String(p2preq); key=key.substring(key.indexOf("$Lock ")+6, key.indexOf(" Pk=")); sckServer1.getOutputStream().write(("$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0|"+lockToKey(key)+"$ValidateNick Master256|").getBytes()); sckServer1.getOutputStream().flush(); sckServer1.getOutputStream().write(("$MyINFO $ALL Master256 <FlylinkDC++ V:17958,M:P,H:1/2/3,S:20>$ $1A$123@321.ru$50000000000$|").getBytes()); sckServer1.getOutputStream().flush(); sckServer1.getOutputStream().write(("$Search Hub:Master256 F?T?0?9?TTH:7FZEBBKAWID5QSOX5DQFDZS6CXPCBV63RPNUCTA|").getBytes()); sckServer1.getOutputStream().flush(); Разобрался с кодировкой. Ошибочно использовал ZPipe0. Из за этого всё приходило в сжатом виде. Со всем разобрался. В описании протокола много проелов и не ясностей. Долго не мог понять где ловить поисковой ответ от сервера. Как соединятся с пользователями для скачивания файлов...но всё решилось. Вот код, если кому-то интересно. Это грубый черновик конечно же. Тут чтение первых скольки-то байт фильма Неудержимые 3 с хаба филимания у одного из пользователей. Проверено. Работает. Код p2padrr=new InetSocketAddress("dc.filimania.com", 411);
String key=""; Socket sckServer1 = new Socket(); Socket sckServer2 = new Socket(); try { sckServer1.connect(p2padrr); sckServer1.getInputStream().read(p2preq); key=new String(p2preq); key=key.substring(key.indexOf("$Lock ")+6, key.indexOf(" Pk=")); sckServer1.getOutputStream().write(("$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch|"+lockToKey(key)+"$ValidateNick Master256|").getBytes()); sckServer1.getOutputStream().flush(); sckServer1.getOutputStream().write(("$Version 1,0091|$MyINFO $ALL Master256 <FlylinkDC++ V:r502-x64,M:P,H:1/0/0,S:15>$ $100 $$500000000000$|").getBytes()); sckServer1.getOutputStream().flush(); p2preq=new byte[1024*100]; int i8=10; while ((bytes_read = sckServer1.getInputStream().read( p2preq)) != -1) { key=new String(p2preq, "windows-1251"); if ((key.contains("YQOU7P77AXP7FMKY6R5XJKCNYBHC46LZ2BXTZNI")==true) || (key.contains("$SR")==true) || (key.contains("Master255")==true) || (key.contains("Master256")==true) || (key.contains("77.241.32.197")==true)) { Log.d("999", key.substring(0, bytes_read)); } else { Log.d("999", key.substring(0, bytes_read));} if (i8==0){ sckServer1.getOutputStream().write(("$Search Hub:Master256 F?T?0?9?TTH:YQOU7P77AXP7FMKY6R5XJKCNYBHC46LZ2BXTZNI|").getBytes()); sckServer1.getOutputStream().flush(); p2preq=new byte[1024*100]; while ((bytes_read = sckServer1.getInputStream().read( p2preq)) != -1) { key=new String(p2preq, "windows-1251"); Log.d("999", key.substring(0, bytes_read)); if (key.contains("$SR")) {break;} p2preq=new byte[1024*100]; } sckServer1.getOutputStream().write(("$RevConnectToMe Master256 serpentarium1377|").getBytes()); sckServer1.getOutputStream().flush(); p2preq=new byte[1024*100]; while ((bytes_read = sckServer1.getInputStream().read( p2preq)) != -1) { key=new String(p2preq, "windows-1251"); Log.d("999", key.substring(0, bytes_read)); if (key.contains("$ConnectToMe Master256")) { String hgf=key.substring(key.indexOf("$ConnectToMe Master256")+23, key.indexOf(":", key.indexOf("$ConnectToMe Master256")+23)); int u=Integer.parseInt(key.substring(key.indexOf(":", key.indexOf("$ConnectToMe Master256")+23)+1, key.indexOf("|", key.indexOf(":", key.indexOf("$ConnectToMe Master256")+23)))); InetSocketAddress p2padrr1=new InetSocketAddress(hgf, u); sckServer2.connect(p2padrr1); break;} p2preq=new byte[1024*100]; } sckServer2.getOutputStream().write(("$MyNick Master256|$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.785ABCABCRef=dchub://dc.dcmagnets.ru|").getBytes()); sckServer2.getOutputStream().flush(); p2preq=new byte[1024*100]; bytes_read = sckServer2.getInputStream().read(p2preq); key=new String(p2preq, "windows-1251"); Log.d("999", key.substring(0, bytes_read)); p2preq=new byte[1024*100]; sckServer2.getOutputStream().write(("$Supports MiniSlots XmlBZList ADCGet TTHL TTHF ZLIG|$Direction Download 2436|$Key СА° A С±±АА0Р0 0 0 0 0 0|").getBytes()); sckServer2.getOutputStream().flush(); p2preq=new byte[1024*100]; sckServer2.getOutputStream().write(("$ADCGET tthl TTH/YQOU7P77AXP7FMKY6R5XJKCNYBHC46LZ2BXTZNI 0 -1 ZL1|").getBytes()); sckServer2.getOutputStream().flush(); while ((bytes_read = sckServer2.getInputStream().read( p2preq)) != -1) { key=new String(p2preq, "windows-1251"); Log.d("999", key.substring(0, bytes_read)); p2preq=new byte[1024*100]; } i8=30000; } i8=i8-1; p2preq=new byte[1024*100]; } } catch (IOException e3) { e3.printStackTrace(); } |
|
|
15.12.2014, 11:04
Сообщение
#2
|
|
Продвинутый участник Группа: Пользователи Сообщений: 155 Регистрация: 11.1.2009 Пользователь №: 1 772 Спасибо сказали: 29 раз |
заходи на местный хаб dchub://hub.mydc.ru и спрашивай в чате (или у меня там в личке, чем смогу - помогу)
|
|
|
15.12.2014, 15:06
Сообщение
#3
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 6.2.2009 Из: Липецк Пользователь №: 2 131 Спасибо сказали: 8 раз |
Делаю программу, работающую по этому протоколу. Нужен поиск по TTH и скачивание найденного файла. А это у тебя будет робот? или ты просто изучаешь как оно внутри работает что заметил 1. Ты используешь пассивный поиск специально? думаю при нагрузке от бота админы вычислят это и забанят 2. У тебя в тэге закос под FlylinkDC++ предлагаю поменять на свой ) 3. Код заливай на github ) |
|
|
16.12.2014, 21:12
Сообщение
#4
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Во первых! Вот
А это у тебя будет робот? или ты просто изучаешь как оно внутри работает что заметил 1. Ты используешь пассивный поиск специально? думаю при нагрузке от бота админы вычислят это и забанят 2. У тебя в тэге закос под FlylinkDC++ предлагаю поменять на свой ) 3. Код заливай на github ) Я делаю медиа плеер, а в будущем гибридное облако для обмена данными. Ничего противозаконного. Код залью на гит хаб. Вот здесь будет код Это моё приложение для андройд программистов, что бы они тоже могли писать свои программы с использованием моих технологий. Код принял уже рабочий вид. Скорей всего будет ничего не понятно. Так как тут не полный код. Но суть понять можно. Вот процедура подключения Код private boolean connectDC() { p2padrr = new InetSocketAddress(Hub, dcPort); p2pServer = new Socket(); p2preq = new byte[1024 * 10]; try { p2pServer.connect(p2padrr); p2pServer.getInputStream().read(p2preq); str = new String(p2preq, CHARENCODING); str = str.substring(str.indexOf("$Lock ") + 6, str.indexOf(" Pk=")); p2pServer .getOutputStream() .write(("$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch|" + lockToKey(str) + "$ValidateNick " + nick + "|" + "$Version 1,0091|$MyINFO $ALL " + nick + " <FlylinkDC++ V:r502-x64,M:P,H:1/0/0,S:15>$ $100 $$600000000000$|") .getBytes()); p2pServer.getOutputStream().flush(); p2preq = new byte[1024 * 10]; while ((bytes_read = p2pServer.getInputStream().read(p2preq)) != -1) { str = new String(p2preq, CHARENCODING); if (str.contains("$ValidateDenide")) { nick = nick + Integer.toString(postFix); postFix = postFix + 1; if (postFix > 100) { errorDC = true; return false; } else { connectDC(); } } if (str.contains("$Search")) { errorDC = false; return true; } } } catch (Exception e) {} errorDC = true; return false; } Этот кусок ищет, запрашивает, подключается и качает. Код // Read from DC++ peering network! if ((useDC == true) && (errorDC == false)) { try { if ((p2pServer == null) || (p2pServer.isConnected() != true)) { if (connectDC() == false) { errorDC = true; throw new NullPointerException("No connect"); } } try { os = new RandomAccessFile(file1, "rwd"); os.seek(request._rangePosition); } catch (FileNotFoundException e2) { e2.printStackTrace(); } if (nickUser.length() < 1) {// then get nick user p2pServer.getOutputStream() .write(("$Search Hub:" + nick + " F?T?0?9?TTH:" + TTH + "|").getBytes()); p2pServer.getOutputStream().flush(); p2preq = new byte[1024 * 10]; retr = 40;// number of answers to searches while ((bytes_read = p2pServer.getInputStream().read( p2preq)) != -1) { str = new String(p2preq, CHARENCODING); Log.d("999", str.substring(0, bytes_read)); if (str.contains("$SR")) { nickUser = str.substring( str.indexOf("$SR") + 4, str.indexOf( " ", str.indexOf("$SR") + 4)); urlsize = Integer .parseInt(str.substring( str.indexOf("", str.indexOf("$SR")) + 1, str.indexOf( " ", str.indexOf("", str .indexOf("$SR")) + 1))); break; } retr = retr - 1; if (retr == 0) { throw new NullPointerException( "No search result"); } p2preq = new byte[1024 * 10]; } } p2pServer.getOutputStream().write( ("$RevConnectToMe " + nick + " " + nickUser + "|") .getBytes()); p2pServer.getOutputStream().flush(); p2preq = new byte[1024 * 10]; retr = 40;// number of answers (user) to searches while ((bytes_read = p2pServer.getInputStream() .read(p2preq)) != -1) { str = new String(p2preq, CHARENCODING); Log.d("999", str.substring(0, bytes_read)); if (str.contains("$ConnectToMe " + nick)) { ipUser = str.substring(str.indexOf("$ConnectToMe " + nick) + ("$ConnectToMe "+ nick).length()+1, str.indexOf(":", str.indexOf("$ConnectToMe " + nick) + ("$ConnectToMe "+ nick).length()+1)); portUser = Integer .parseInt(str.substring(str .indexOf( ":", str.indexOf("$ConnectToMe " + nick) + ("$ConnectToMe "+ nick).length()+1) + 1, str.indexOf("|", str.indexOf( ":", str.indexOf("$ConnectToMe " + nick) + ("$ConnectToMe "+ nick).length()+1)))); break; } p2preq = new byte[1024 * 10]; retr = retr - 1; if (retr == 0) { throw new NullPointerException( "No answer from User"); } } sckUser = new Socket(); sckUser.setSoTimeout(1500); InetSocketAddress p2padrr1 = new InetSocketAddress(ipUser, portUser); sckUser.connect(p2padrr1); sckUser.getOutputStream() .write(("$MyNick " + nick + "|$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.785ABCABCRef=dchub://" + Hub + "|$Supports MiniSlots ADCGet TTHL TTHF|$Direction Download 7777|$Key СА° A С±±АА0Р0 0 0 0 0 0|" + "$ADCGET file TTH/" + TTH + " " + request._rangePosition + " -1|") .getBytes()); sckUser.getOutputStream().flush(); // header if ((request._rangePosition > 0) || (request._overRange == true)) { header = "HTTP/1.1 206 Partial Content\r\nAccept-Ranges: bytes\r\nContent-Length: " + Long.toString(urlsize - request._rangePosition) + "\r\nContent-Range: bytes " + Long.toString(request._rangePosition) + "-" + Long.toString(urlsize - 1) + "/" + urlsize + "\r\nContent-Type: application/octet-stream\r\n\r\n"; } else { header = "HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nContent-Length: " + Long.toString(urlsize) + "\r\nContent-Disposition: attachment\r\nContent-Type: application/octet-stream\r\n\r\n"; } sckPlayer.getOutputStream().write(header.getBytes(), 0, header.length()); // removes $ADCSND p2preq = new byte[1024 * 10]; bytes_read = sckUser.getInputStream().read(p2preq); str = new String(p2preq, CHARENCODING); if (str.contains("$ADCSND")) { str = str.substring(str.indexOf("$MyNick"), str.indexOf("|", str.indexOf("$ADCSND")) + 1); bytes_read = bytes_read - str.length(); } else { str = ""; } sendByte = sendByte + bytes_read; os.write(p2preq, str.length(), bytes_read); sckPlayer.getOutputStream().write(p2preq, str.length(), bytes_read); while ((bytes_read = sckUser.getInputStream().read(p2preq)) != -1) { os.write(p2preq, 0, bytes_read); sendByte = sendByte + bytes_read; sckPlayer.getOutputStream() .write(p2preq, 0, bytes_read); } sckPlayer.getOutputStream().flush(); } catch (Exception e3) { e3.printStackTrace(); } } конечно это ещё первая версия...и тут без раздачи и текст запросов может где-то не совпасть...но...передача данных уже идёт...байт в байт...и клипы играют. А программа будет вот эта |
|
|
17.12.2014, 1:44
Сообщение
#5
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Master255, и в чем же заключается ненормальность нашего описания протокола? Нашли ошибки? Покажите, и мы исправим их.
P. S. Полагаю, многим юзерам и админам хабов не понравится Ваша личерская программа, и они начнут яростно с ней бороться. |
|
|
17.12.2014, 1:59
Сообщение
#6
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Master255, и в чем же заключается ненормальность нашего описания протокола? Нашли ошибки? Покажите, и мы исправим их. P. S. Полагаю, многим юзерам и админам хабов не понравится Ваша личерская программа, и они начнут яростно с ней бороться. А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места. Читайте внимательно. В моей программе нет ничего противозаконного. То что она не раздаёт - это временный факт. Который не выгоден не только хабам, но и пользователям этой программы. Я же не могу сразу написать звездолёт. Пишу по частям...как могу. И так должны спасибо говорить. |
|
|
17.12.2014, 3:20
Сообщение
#7
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места. Дело в том, что Ваше мнение без ссылок на конкретные ошибки выглядит как пук в лужу. С таким же успехом я могу сказать, что Ваша программа хуже чем вон та, и выдолжны немедленно заменить ее на другую.Нет, спасибо, за нас ничего исправлять не надо. Инструкцию писал человек, разрабатывавший DC-хаб, и он прекрасно знает протокол. Возможно, Setuper при составлении описания протокола пропустил какие-то теги, и допустил какие-то ошибки, ведь он тоже человек, а не робот. Конкретных примеров навалом - как минимум 4 опенсорсных хаба, и целая куча опенсорсных клиентов. Качайте и ковыряйте на здоровье. Или Вы хотите, чтобы Вам разжевали и в рот положили? Цитата Пишу по частям...как могу. И так должны спасибо говорить. Спасибо за что? За конструктивную критику? Ну так я пока что не вижу конструктива.
|
|
|
17.12.2014, 10:12
Сообщение
#8
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места. Читайте внимательно. В моей программе нет ничего противозаконного. То что она не раздаёт - это временный факт. Который не выгоден не только хабам, но и пользователям этой программы. Я же не могу сразу написать звездолёт. Пишу по частям...как могу. И так должны спасибо говорить. Могу сказать Вам как java программист java программисту, что Ваш код просто ужасен. Макаронный код, похожий на код студента. По поводу каких-то ошибок в описании могу сказать, что возможно Вы сами еще не до конца разобрались в протоколе и путаете механизмы активного и пассивного поиска. |
|
|
17.12.2014, 10:53
Сообщение
#9
|
|
Продвинутый участник Группа: Пользователи Сообщений: 155 Регистрация: 11.1.2009 Пользователь №: 1 772 Спасибо сказали: 29 раз |
А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места. Читайте внимательно. В моей программе нет ничего противозаконного. То что она не раздаёт - это временный факт. Который не выгоден не только хабам, но и пользователям этой программы. Я же не могу сразу написать звездолёт. Пишу по частям...как могу. И так должны спасибо говорить. Сколько много пафоса, однако! Цитата Я же не могу сразу написать звездолёт. Пишу по частям...как могу. И так должны спасибо говорить. Это кто кому должен говорить спасибо? За что? За "абы как написанные части звездолёта"? Спасибо, чо уж там Цитата Мне приходилось много гуглить. Аргументный аргумент. Цитата Пишите что данные идут через udp, а они идут через TCP. Это повод еще раз открыть "нормальную инструкция по протоколу" и увидеть, что и там ТОЖЕ написано про UDP. и ВНЕЗАПНО протоколы зависят от режима подключения. Гуглилось хоть и много, но плохо, да и "нормальную инструкцию" нормально прочитать тоже не получилось.. пичалька Цитата Я программист! Преклоняемся, о великий! Как посмели мы сомневаться, как сразу не признали.. Прости нас, ничтожных! |
|
|
17.12.2014, 13:22
Сообщение
#10
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Могу сказать Вам как java программист java программисту, что Ваш код просто ужасен. Макаронный код, похожий на код студента. По поводу каких-то ошибок в описании могу сказать, что возможно Вы сами еще не до конца разобрались в протоколе и путаете механизмы активного и пассивного поиска. Вы андройд разработчик? в чём ужас?? Хотя бы один пример где просто ужасно??? Ничего я не путаю. Про все механизмы знаю. Уже наизусть помню половину команд протокола и их синтаксис. Дело в том, что Ваше мнение без ссылок на конкретные ошибки выглядит как пук в лужу. С таким же успехом я могу сказать, что Ваша программа хуже чем вон та, и выдолжны немедленно заменить ее на другую. Нет, спасибо, за нас ничего исправлять не надо. Инструкцию писал человек, разрабатывавший DC-хаб, и он прекрасно знает протокол. Возможно, Setuper при составлении описания протокола пропустил какие-то теги, и допустил какие-то ошибки, ведь он тоже человек, а не робот. Конкретных примеров навалом - как минимум 4 опенсорсных хаба, и целая куча опенсорсных клиентов. Качайте и ковыряйте на здоровье. Или Вы хотите, чтобы Вам разжевали и в рот положили? Спасибо за что? За конструктивную критику? Ну так я пока что не вижу конструктива. Я пишу для программистов. Код открытый! Другие будут брать мой код и кодить вам программы о которых вы сейчас только мечтаете. За это и спасибо. |
|
|
17.12.2014, 15:18
Сообщение
#11
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Считаю, что нужно всем умерить пыл и снизить тон разговора!
Человек делает нечто полезное, сгоряча, от незнания специфики этого форума, говорит некоторые нелицеприятные слова, но всё же остальным не стоит сразу же закусывать удила, ибо это идёт не на пользу общему делу! Человек закроется и начнёт что-то очень нужное выдавать на гора в других местах...а зачем? Нужно найти компромисс, показывать друг другу ошибки, признавать ошибки, если поняли, что они присутствуют... И в любом случае следить за словами! Обидеть художника может каждый.. но если вы сами художники, тем более должны понимать, что обидно слышать неприятные слова вместо помощи и понимания.. Учитесь терпению у министра иностранных дел России С. Лаврова, ребята! И у В.Чуркина, нашего представителя в ООН. Надеюсь на понимание! |
|
|
17.12.2014, 21:15
Сообщение
#12
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Цитата Вы андройд разработчик? в чём ужас?? Хотя бы один пример где просто ужасно??? Я ни разу не android-разработчик, и совсем не знаю java но даже я вижу ужас, от которого стынет кровь в жилах. Код str.contains("$ValidateDenide") Т.е. если строка содержит $ValidateDenide в любом месте, то эта строка считается указанной командой. В таком случае отфильтровать Ваш клиент будет не то что просто, а очень просто. Для этого достаточно отправить ему чушь вроде этой: Код $oZshb6243dss34 $ValidateDenide| Нормальные клиенты проигнорируют это, ибо оно не является командой протокола, а Ваш клиент отключится, посчитав, что ник занят.И так по всему коду. Однако, в результате минутного гугления мы выходим на Код public boolean startsWith(String prefix) И логика подсказывает нам, что для проверки команд протокола следует использовать именно ее.Так что Вы не знаете не только протокол DC, но даже тот язык, на котором пытаетесь писать программы. А посему умерьте пафос, и учитесь, учитесь, и еще раз учитесь. |
|
|
18.12.2014, 15:08
Сообщение
#13
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Я ни разу не android-разработчик, и совсем не знаю java но даже я вижу ужас, от которого стынет кровь в жилах. Код str.contains("$ValidateDenide") Т.е. если строка содержит $ValidateDenide в любом месте, то эта строка считается указанной командой. В таком случае отфильтровать Ваш клиент будет не то что просто, а очень просто. Для этого достаточно отправить ему чушь вроде этой: Код $oZshb6243dss34 $ValidateDenide| Нормальные клиенты проигнорируют это, ибо оно не является командой протокола, а Ваш клиент отключится, посчитав, что ник занят.И так по всему коду. Однако, в результате минутного гугления мы выходим на Код public boolean startsWith(String prefix) И логика подсказывает нам, что для проверки команд протокола следует использовать именно ее.Так что Вы не знаете не только протокол DC, но даже тот язык, на котором пытаетесь писать программы. А посему умерьте пафос, и учитесь, учитесь, и еще раз учитесь. У вас явный эффект То что вы ниразу не разработчик мне ясно понятно. Не понятно одно - как вы смеете давать советы, если не разработчик??? Что это за новости вообще? Если вы пользователь, то вы можете лишь спрашивать когда заработает то или другое и желать каких-то новых функций. Зачем вы лезите туда где ничего не понимаете и пытаетесь нагуглить? Гуглить полезно и критику к коду я тоже люблю. Особенно когда она по делу. Ну я не знаю, с чего начать даже. Ваш коммент ни в какие ворота. Проверка наличия $ValidateDenide происходит только при регистрации на хабе. В этот момент моему клиенту ничего нельзя послать, кроме стандартных команд автоответов хаба. На хабе тысячи пользователей. Зачем вообще кому-то что-то слать??? Я уже повторял, что моя программа не будет нарушать никаких законов хабов. Проверка contains делается потому что ответы через сокет поступают не предсказуемо. Я поставил буфер в 10к\байт. И чем закончатся предыдущие 10к.байт и начнутся следующие непонятно. Это всё сделано потому что сначала хаб присылает список ников. Который заканчивается началом команды $Search. И между командой $Search и началом авторизации никто ничего не может мне послать, если хаб не блокирует меня по ipадресу и тогда у меня даже коннекта не получится. И отсутствие коннекта тоже продумано. А если брать ещё то что разные хабы работают по разному и отсылают вместо ников ещё какую-то ерунду...а в спецификации чётко прописано, что просто в чат невозможно скинуть символы $, |, то команда contains именно то что нужно. А команда startsWith может ошибаться даже если на один бит будет сдвиг. А это опасно продолжением отсылки команд и отключением от сервера. Это предусмотрено. Но в таком случае программа будет делать много циклов что бы просто авторизоваться. А это много времени...что крайне не допустимо по условию задачи. Можно ещё много рассказывать почему вы не правы, но я думаю можно сказать коротко - вы не программист! Считаю, что нужно всем умерить пыл и снизить тон разговора! Человек делает нечто полезное, сгоряча, от незнания специфики этого форума, говорит некоторые нелицеприятные слова, но всё же остальным не стоит сразу же закусывать удила, ибо это идёт не на пользу общему делу! Человек закроется и начнёт что-то очень нужное выдавать на гора в других местах...а зачем? Нужно найти компромисс, показывать друг другу ошибки, признавать ошибки, если поняли, что они присутствуют... И в любом случае следить за словами! Обидеть художника может каждый.. но если вы сами художники, тем более должны понимать, что обидно слышать неприятные слова вместо помощи и понимания.. Учитесь терпению у министра иностранных дел России С. Лаврова, ребята! И у В.Чуркина, нашего представителя в ООН. Надеюсь на понимание! Я вообще не знаю о чём тут разговаривать. Тема вроде бы исчерпана. Ссылки я все указал. Код уже на гитхабе. Кому надо найдёт. |
|
|
18.12.2014, 16:15
Сообщение
#14
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 6.2.2009 Из: Липецк Пользователь №: 2 131 Спасибо сказали: 8 раз |
Я вообще не знаю о чём тут разговаривать. Тема вроде бы исчерпана. Ссылки я все указал. Код уже на гитхабе. Кому надо найдёт. Хорошо что продвигаешь nmdc на мобилки и код открытый то что у тебя он не идеальный - так у всех есть говнокод но если это работает - то уже победа отрефакторишь потом. p.s. Если не сложно замени сразу тэг клиента FlylinkDC на ImmortalPlayer на хабах будет сразу видно кто пользуется твоей программкой. |
|
|
18.12.2014, 16:27
Сообщение
#15
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Хорошо что продвигаешь nmdc на мобилки и код открытый то что у тебя он не идеальный - так у всех есть говнокод но если это работает - то уже победа отрефакторишь потом. p.s. Если не сложно замени сразу тэг клиента FlylinkDC на ImmortalPlayer на хабах будет сразу видно кто пользуется твоей программкой. Ок |
|
|
19.12.2014, 3:08
Сообщение
#16
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Цитата Есть недопонимание происходящего с вашей стороны. Тут имеестя некоторое недопонимание с вашей стороны. Мне по большому счету насрать, как будет работать Ваша программа. Того говнокода, что вы выкладывали, вполне достаточно для того, чтобы составить о ней представление. Нет, я не пользователь, и мне все равно, когда там появятся какие-то свистопределки. Я вообще достаточно негативно отношусь к операционной системе, под которую вы пытаетесь написать программу, поскольку видел, как она работает.Я предложил Вам указать на конкретые ошибки лишь потому, что имею некоторые права на этом форуме, и, как результат, могу эти самые ошибки исправить. И тут понеслось... Я думаю, все уже поняли, что за Цитата По вашей инструкции программу не написать. Мне приходилось много гуглить. А может мне за вас ещё всё написать??? Что вы несёте!!! Я модератор!!!11 Высказал своё мнение о том что неплохо бы дать ссылки на ошибки!!! И где они, ссылки-то???Цитата Проверка contains делается потому что ответы через сокет поступают не предсказуемо. Я поставил буфер в 10к\байт. И чем закончатся предыдущие 10к.байт и начнутся следующие непонятно. У вас явный эффект То что вы ниразу не разработчик мне ясно понятно. Не понятно одно - как вы смеете писать программы, если не разработчик??? Что это за новости вообще???77 Если вы пользователь, то вы можете лишь спрашивать когда появится та или иная программа и желать каких-то новых программ. Зачем вы лезите туда где ничего не понимаете и пытаетесь написать программу? Гуглить полезно и критику к форуму я тоже люблю. Особенно когда она по делу. Ну я не знаю, с чего начать даже. Ваша программа ни в какие ворота. Судя по Вашим же словам, она работает как предсказательница Ванга - пытается угадать, что же произойдет, а когда у нее это не получается, перезаходит на хаб. Но мы-то знаем, что тот самый символ |, который, как Вы сами сказали, запрещен в чате, запрещен там не просто так. Это символ окончания команды. Проще говоря в DC, который вы уже знаете наизусть, команды выглядят следующим образом: Код $SomeCommand|$OtherCommand command_parameters|$OtherCommand command_parameters|$OtherCommand command_parameters| Из этого следует, что никакой непредсказуемости и неопределенности в протоколе DC нет и не может быть. Каждая команда заканчивается символом |, и после этого сразу же следует другая команда.Можно ещё много рассказывать почему вы не правы, но я думаю можно сказать коротко - вы не программист! Цитата команда contains Что вы несёте! В языках программирования есть функции и методы, а команды - в футболе.Цитата Во первых! Вот Я вообще не знаю о чём тут разговаривать. Тема вроде бы исчерпана. Протокол описан хорошо. По данному описанию написана не одна реализация DC-клиента. Под каждым постом есть кнопка [!], с помощью которой можно сообщить администрации о найденных ошибках. Кому надо разберется.P.S. Орфографические и пунктуационные ошибки в данном посте - результат копирования стиля речи автора темы, и они добавлены умышленно. Следовательно, не нужно пинать меня за них. |
|
|
19.12.2014, 4:04
Сообщение
#17
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Тут имеестя некоторое недопонимание с вашей стороны. Мне по большому счету насрать, как будет работать Ваша программа. Того говнокода, что вы выкладывали, вполне достаточно для того, чтобы составить о ней представление. Нет, я не пользователь, и мне все равно, когда там появятся какие-то свистопределки. Я вообще достаточно негативно отношусь к операционной системе, под которую вы пытаетесь написать программу, поскольку видел, как она работает. Я предложил Вам указать на конкретые ошибки лишь потому, что имею некоторые права на этом форуме, и, как результат, могу эти самые ошибки исправить. И тут понеслось... Я думаю, все уже поняли, что за А может мне за вас ещё всё написать??? Что вы несёте!!! Я модератор!!!11 Высказал своё мнение о том что неплохо бы дать ссылки на ошибки!!! И где они, ссылки-то??? У вас явный эффект То что вы ниразу не разработчик мне ясно понятно. Не понятно одно - как вы смеете писать программы, если не разработчик??? Что это за новости вообще???77 Если вы пользователь, то вы можете лишь спрашивать когда появится та или иная программа и желать каких-то новых программ. Зачем вы лезите туда где ничего не понимаете и пытаетесь написать программу? Гуглить полезно и критику к форуму я тоже люблю. Особенно когда она по делу. Ну я не знаю, с чего начать даже. Ваша программа ни в какие ворота. Судя по Вашим же словам, она работает как предсказательница Ванга - пытается угадать, что же произойдет, а когда у нее это не получается, перезаходит на хаб. Но мы-то знаем, что тот самый символ |, который, как Вы сами сказали, запрещен в чате, запрещен там не просто так. Это символ окончания команды. Ответить нечего. Вы просто |
|
|
19.12.2014, 12:00
Сообщение
#18
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Пора на форуме добавить опцию минусования комментов..
Я серьёзно! |
|
|
19.12.2014, 13:39
Сообщение
#19
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
1. Ну а смысл минусования комментов? Заминусуете вы коммент, и что?
Полезность комментов получается из количества "Спасибо". Если их 0, то значит и коммент никому полезен не был, отсюда можно уже судить о его содержании 2. Форум чтобы общаться и помогать друг-другу. Не хотите помогать, потролльте/покритикуйте в другом месте. 3. Помнится писал я на луа свой клиент для хаба, и тоже сначала ломал голову над протоколом, но потом все встало на места. Надо просто немного терпения. Писал я кстати по инструкции Сетапера ака Ильи, и все очень замечательно получалось. Выкладывать сначала весь код нет смысла, пока он не работает полноценно, это ошибка №1. Спрашивать стоит именно про те части программы, что не получаются/не работают. Спрашивать конструктивно и с уважением, тогда и ответ будет соответствующий. Я пользовался дебаггером, встроенным в клиент, чтобы посмотреть уже реализованное взаимодействие клиент-хаб, так и нагляднее и понятнее. Попробуйте. У каждого хаба еще есть свои тонкости, поэтому попотеть вам придется достаточно долго, чтобы клиент был полноценным. Что за тонкости правда не помню уже. И конкретный конструктив по логике: вы в буфер получаете какую-то "кашу". Эту кашу вы дробите по символу конца команы протокола, т.е. | И если у вас последняя команда не заканчивается этим символом, значит она не влезла в буфер. Вы этот кусок команды сохраняете, и приклеиваете к началу следующего буфера, который так же дробится по |. И так до бесконечности. Вот тогда никакой непредсказуемости в протоколе не будет. Он достаточно простой и понятный на самом деле. |
|
|
19.12.2014, 15:08
Сообщение
#20
|
|
Начинающий Группа: Пользователи Сообщений: 17 Регистрация: 13.12.2014 Пользователь №: 12 606 Спасибо сказали: 1 раз |
Пора на форуме добавить опцию минусования комментов.. Я серьёзно! не надо никаких репрессий. И так в жизни дерьма хватает))) |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
ВАЖНО: Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
1 049 | Wariner | 991 361 | 3.2.2019, 12:51 Посл. сообщение: MIKHAIL | |
ВАЖНО: Ваши Вопросы И Предложения По Поводу Форума | 447 | Svyat | 322 163 | 20.10.2015, 19:39 Посл. сообщение: Ksan | |
От: Вопросы Разработчикам Скриптов От темы с ID: 173 |
0 | MIKHAIL | 4 337 | 23.1.2015, 0:56 Посл. сообщение: MIKHAIL | |
Вопросы к Phazeus по Экзекутору Мастер может забанить мастера, как решить в Экзекуторе? |
1 | AndreiDC | 5 373 | 31.10.2014, 19:20 Посл. сообщение: Ksan | |
От: Вопросы Разработчикам Скриптов От темы с ID: 173 |
29 | Wariner | 25 996 | 28.1.2014, 13:11 Посл. сообщение: Alexey | |
Вопросы по RusHub Технические вопросы |
316 | Jaska | 269 300 | 19.12.2013, 13:59 Посл. сообщение: mod | |
Мелкие вопросы | 44 | Wariner | 50 989 | 19.9.2013, 12:34 Посл. сообщение: Alexey | |
От: Ваши Вопросы И Предложения По Поводу Форума От темы с ID: 753 |
3 | anila | 9 130 | 28.3.2013, 16:02 Посл. сообщение: настя | |
От: вопрос по NMDC. От темы с ID: 4932 |
0 | MIKHAIL | 5 536 | 25.1.2013, 19:48 Посл. сообщение: MIKHAIL | |
вопрос по NMDC. . |
6 | Lamo | 13 356 | 29.5.2012, 19:35 Посл. сообщение: Lamo | |
Протокол IPv6 в протоколе NMDC Спецификация и тестирование IPv6 в NMDC |
109 | gif-t | 95 916 | 26.2.2012, 10:12 Посл. сообщение: AMD | |
NMDC Extensions Расширения и новые команды NMDC протокола |
10 | Meloun | 18 412 | 19.2.2012, 16:39 Посл. сообщение: gif-t | |
От: NMDC Extensions От темы с ID: 5095 |
0 | Артём | 5 599 | 4.1.2012, 18:56 Посл. сообщение: Артём | |
Вопросы Разработчикам Скриптов с SQL вопросы по скриптам (мелкие вопросы) |
101 | Wariner | 62 320 | 6.12.2011, 0:34 Посл. сообщение: Enyby | |
От: Вопросы по RusHub От темы с ID: 2902 |
4 | Otshelnik-Fm | 8 471 | 19.10.2011, 9:23 Посл. сообщение: Mangust |
|
Сейчас: 26.11.2024, 22:51 |