Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 00:10   #1
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию INDY 10.5.5, 10.5.7, 10.5.8 Переход на новую строку.

Сори за косое название темы, но чем дольше использую инди, тем больше оно меня бесит.

Поставил себе INDY 10.5.7 (до этого стояла 10.5.8, еще раньше 10.5.5)
Вобщем отправляю одинаковое сообщение:
Код:
idIRC1.raw('NICK '+Login1+sLineBreak+'mlogin '+Login1);
В HEX 10.5.5: "4E 49 43 4B 20" +Login1+ "0D 0A 6D 6C 6F 67 69 6E 20" +Login1
В HEX 10.5.7: "4E 49 43 4B 20" +Login1+ "10 10 72 10 10 6E 6D 6C 6F 67 69 6E 20" +Login1

Что это "10 10 72 10 10 6E" такое???
Где "0D 0A" ???
БРЕД!
Серв не понимает, что я хочу авторизоваться.
Если sLineBreak заменить #13 то результат абсолютно такой же!

Последний раз редактировалось ZBEP; 06.11.2010 в 00:13.
ZBEP вне форума Ответить с цитированием
Старый 06.11.2010, 00:15   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Общее правило (из опыта) - не торопиться с установкой новых версий.
Их делают такие же люди, как и мы, им тоже свойственно ошибаться.
Например, я ХР не ставил (пользовался МЕ) целых 2 года после ее выхода и избежал испорченного настроения...
mihali4 вне форума Ответить с цитированием
Старый 06.11.2010, 00:23   #3
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

mihali4, да цирк какой, по Причине обновился до версии 10.5.8, но это не помого и к тому же вырубился свет и слетело делфи.
Качнул XE, поставил, там версия инди 10.5.7 и всеравно та же фигня, вместо обычного перехода "0D 0A", там "10 10 72 10 10 6E".
6E - это вообще "n", получается "nmlogin", не считая даже непонятных "10 10 72 10 10" серв все равно нифига не понял бы.

По логам:
Цитата:
NICK Login1
mlogin Login1
Он все таки переходит на новою строчку, но не так как хотелось бы. Необходимо "0D 0A".

Из идей ток 2 варианта.
1. Вернуться к 10.5.5
2. Убиться об стену.

Может кто то знает еще другие варианты?

Пока только понял, что "0D" он заменяет на "10 10 72", а "0A" на "10 10 6E", но зачем?
И как можно было так случайно ошибиться 0_о. а если это не ошибка, то для чего это нужно?
Если я посылаю "0A", значит мне надо что бы отослалось "0A" , а не "10 10 6E".
Ну а если я посылаю "10 10", то что?
Праильно, INDY посылает "10 10 10 10".
Это ведь "именно то что мне нужно" @#$%^&%@

Ни у кого никаких идей нету?
Или никто idIRC не пользуется или эти "изменения" им не мешают?

П.с.
Написал на офф форум, пока не ответили и тему, что там создал еще не разместили

Последний раз редактировалось ZBEP; 06.11.2010 в 16:52.
ZBEP вне форума Ответить с цитированием
Старый 07.11.2010, 20:21   #4
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Все, проблему решил так:
В 10.5.7 (10.5.8) изменили процедуру RAW:
IdIRC.pas:
Код:
procedure TIdIRC.Raw(const ALine: String);
begin
  if Connected then begin
    if Assigned(FOnRaw) then begin
      FOnRaw(nil, False, ALine);
    end;
    IOHandler.WriteLn(IRCQuote(ALine));
  end;
end;
В 10.5.5 она выглядит так:
Код:
procedure TIdIRC.Raw(const ALine: String);
begin
  if Connected then begin
    if Assigned(FOnRaw) then begin
      FOnRaw(nil, False, ALine);
    end;
    IOHandler.WriteLn(ALine + EOL);
  end;
end;
Можно было просто заменить процидуру на старую версию, но я добавил новую, чтобы можно было отсылать сообщения и способом 10.5.7 (10.5.8) и 10.5.5:
Код:
TIdIRCOldRawEvent = procedure(ASender: TIdContext; AIn: Boolean; const AMessage: String) of object;
...
procedure OldRaw(const ALine: String);
...
procedure TIdIRC.OldRaw(const ALine: String);
begin
  if Connected then begin
    if Assigned(FOnRaw) then begin
      FOnRaw(nil, False, ALine);
    end;
    IOHandler.WriteLn(ALine + EOL);
  end;
end;
Заново пере-компилировал и все.
Теперь если я хочу отослать привычным/старым способом сообщение, то:
Код:
idIRC1.OldRaw('NICK '+sLineBreak+'mlogin ');
//[HEX] 4E 49 43 4B 20 0D 0A 6D 6C 6F 67 69 6E 20
Если новым, как в 10.5.7 (10.5.8),то:
Код:
idIRC1.Raw('NICK '+sLineBreak+'mlogin ');
//[HEX] 4E 49 43 4B 20 10 10 72 10 10 6E 6D 6C 6F 67 69 6E 20

Проблема решена, тему можно закрывать.

Последний раз редактировалось ZBEP; 07.11.2010 в 21:30.
ZBEP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход на новую строку в Memo Лонли-Локли Компоненты Delphi 12 08.01.2021 05:00
Переход на новую строку delphin100 Общие вопросы Delphi 9 31.05.2012 04:52
Переход на новую строку в Memo1 )Игнат( Общие вопросы Delphi 2 07.07.2009 20:31
Переход на новую строку код13 Ecosasha Общие вопросы C/C++ 12 11.06.2009 18:31