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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2009, 14:08   #1
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию проблема с icq

всем привет. делаю на api прогу которая бы была типа аси. но не могу понять в чем проблема. ничего не пишет а окно появляется там что то пишет и тут же исчезает. вот код
Код:


Код:
program new_project;
{$APPTYPE CONSOLE}
uses
Windows,rasunit,ICQClient,WinSock,Registry,
   SysUtils,ICQWorks;


type
  icqsock=class
    ICQClient1:TICQClient;
procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);


    public
    constructor Create;
    destructor Destroy; override;
    end;

{icq}

 constructor icqsock.Create;
  Begin
    inherited Create;
      ICQClient1:=TICQClient.Create(nil);
ICQClient1.OnMessageRecv:=ICQClient1MessageRecv;


End;

  destructor icqsock.Destroy;
  Begin
    icqsock;
    inherited Destroy;
  End;
var
  icqsock1: icqsock;
function GetLocalIP: string;
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;




procedure icqsock.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
icq,fs: cardinal;
ms,mem,cod:string;

begin
icq := StrToInt(UIN);
ms:=(UIN + ': ' + Msg);   //Запываем сообщение в Memo
fs:=strtoint(UIN);

if Msg='agent' then
   begin
   Mem:=(GetLocalIP);
   icqclient1.SendMessage(fs, ''+ mem +'' );
   end;
fs:=strtoint(UIN);
end;






var
  Server1:icqsock;
  MSG: TMSG;
  ICQClient1: TICQClient;
begin
  Server1 := icqsock.Create;
   ICQClient1.ConvertToPlaintext:=true;
icqclient1.Avatars:=false;
ICQClient1.ConnectionTimeout:=0;

ICQClient1.ICQPort:=5190;
ICQClient1.ICQPortViaHTTP:=80;
ICQClient1.ICQServer:='login.icq.com';
ICQClient1.ICQServerViaHTTP:='http.proxy.icq.com';
ICQClient1.PortRangeFirst:=3000;
ICQClient1.PortRangeLast:=50000;
ICQClient1.ProxyPort:=0;
ICQClient1.SecureLogin:=true;
ICQClient1.TypingNotifications:=false;
 ICQClient1.UIN:=777;
 ICQClient1.Password:='7777';

 ICQClient1.Login(S_ALLOWDAUTH);
sleep(10000);
if ICQClient1.LoggedIn then
writeln('connect OK !')
else
writeln('no connect !');

  try
    while GetMessage(MSG, 0, 0, 0) do
      begin
        TranslateMessage(msg);
        DispatchMessage(msg);
      end;


  finally
  readln;
  Server1.Free;
  end;

end.
да и при получении сообщения она отп айпи пк

Последний раз редактировалось D_E_N; 26.10.2009 в 14:15.
D_E_N вне форума Ответить с цитированием
Старый 26.10.2009, 14:12   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

а эта тема открыта?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 26.10.2009, 14:13   #3
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

да. там я буду до нового года ждать.
D_E_N вне форума Ответить с цитированием
Старый 26.10.2009, 14:14   #4
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

ты случаем незнаешь в чем проблема?
D_E_N вне форума Ответить с цитированием
Старый 26.10.2009, 15:27   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ошибка в назначении события- //ICQClient1.OnMessageRecv:= ICQClient1MessageRecv;
- без нее идет передача и бот в фоне працюэ, але приема нету

Код:
для теста...
procedure Ontmr2(uTimerID, uMessage: uint;dwUser, dw1, dw2: dword) stdcall;
begin
 if ICQClient1.LoggedIn then ICQClient1.SendMessage(1111111, '111');
end;
procedure timer_create;
begin
 tmr2:= timesetevent(2000,0,@Ontmr2,0,1)
end;
procedure timer_destroy;
begin
 timeKillEvent(tmr2)
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 26.10.2009 в 15:31.
raxp вне форума Ответить с цитированием
Старый 26.10.2009, 15:43   #6
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

он даже не соединяется. через f8 вылетает после ICQClient1.ICQServer:='login.icq.co m'; убираю событие и тоже самое

Последний раз редактировалось D_E_N; 26.10.2009 в 15:53.
D_E_N вне форума Ответить с цитированием
Старый 26.10.2009, 16:03   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вот как надо, все работает (над приемом пока думаю, самому интересно):
Код:
procedure Ontmr2(uTimerID, uMessage: uint;dwUser, dw1, dw2: dword) stdcall;
begin
 if ICQClient1.LoggedIn then ICQClient1.SendMessage(мой номер, '111'); // гоним тест
end;
procedure timer_create;
begin
 tmr2:= timesetevent(2000,0,@Ontmr2,0,1)
end;
procedure timer_destroy;
begin
 timeKillEvent(tmr2)
end;

begin
timer_create;
 //Server1:= icqsock.Create;
 ICQClient1:= TICQClient.Create(nil);
 //ICQClient1.OnMessageRecv:= ICQClient1MessageRecv;

 ICQClient1.ConvertToPlaintext:=true;
 icqclient1.Avatars:=false;
 ICQClient1.ConnectionTimeout:=0;
 ICQClient1.ICQPort:=5190;
 ICQClient1.ICQPortViaHTTP:=80;
 ICQClient1.ICQServer:='login.icq.com';
 ICQClient1.ICQServerViaHTTP:='http.proxy.icq.com';
 ICQClient1.PortRangeFirst:=3000;
 ICQClient1.PortRangeLast:=50000;

 ICQClient1.ProxyType    := P_HTTPS; //P_NONE если напрямую, то обнулить все
 // ИНАЧЕ РАБОТАТЬ НЕ БУДЕТ!!!
 ICQClient1.ProxyResolve := true; //FALSE
 ICQClient1.ProxyAuth    := true; //FALSE
 ICQClient1.ProxyUserID:= 'user'; //''
 ICQClient1.ProxyPass:= 'pass'; //''
 ICQClient1.ProxyHost:= 'ip'; //''
 ICQClient1.ProxyPort:= порт порокси; //0

 ICQClient1.SecureLogin:=true;
 ICQClient1.TypingNotifications:=false;
 ICQClient1.UIN:= номер;
 ICQClient1.Password:='пароль';

 try ICQClient1.Login($10000000);
 except end; 

 //
 try while GetMessage(Msg, 0, 0, 0) do begin
  TranslateMessage(Msg);
  DispatchMessage(Msg)
 end
 finally timer_destroy end
и еще, брандмауер у меня спросил, когда пошло соединение...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 26.10.2009 в 16:08.
raxp вне форума Ответить с цитированием
Старый 26.10.2009, 16:23   #8
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

у мя ругается на timeKillEvent(tmr2) tmr2:= timesetevent говорит типо я таких незнаю..... ты где то их описал ?

Последний раз редактировалось D_E_N; 26.10.2009 в 16:29.
D_E_N вне форума Ответить с цитированием
Старый 26.10.2009, 16:37   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ага, вот...
Код:
type
  TFNTimeCallBack = procedure(uTimerID, uMessage: UINT;
    dwUser, dw1, dw2: DWORD) stdcall;

//таймер-
  tmr2:integer;
  function timeSetEvent(uDelay, uResolution: UINT;lpFunction: TFNTimeCallBack; dwUser: DWORD; uFlags: UINT): UINT;stdcall; external 'winmm.dll' name 'timeSetEvent';
  function timeKillEvent(uTimerID: UINT): UINT; stdcall; external 'winmm.dll' name 'timeKillEvent';
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 26.10.2009, 21:40   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

разобрался проблема оказалась тривиальна (не обратил внимание на ваш класс вначале)... выкладываю полностью рабочий код приема-передачи:
Код:
program icq;

uses Messages,Windows,sysutils,ICQClient ,ICQWorks;

type
  TFNTimeCallBack = procedure(uTimerID, uMessage: UINT;
    dwUser, dw1, dw2: DWORD) stdcall;
type
  icqsock=class
    ICQClient1:TICQClient;
    procedure MessageRecv(Sender: TObject; Msg, UIN: String);
    public
    constructor Create;
    destructor Destroy; override;
    end;

var
  Msg: tmsg;
  p: boolean;
  ICQClient1: TICQClient;
  Server1:icqsock;

  //таймер-
  tmr2:integer;
  function timeSetEvent(uDelay, uResolution: UINT;lpFunction: TFNTimeCallBack; dwUser: DWORD; uFlags: UINT): UINT;stdcall; external 'winmm.dll' name 'timeSetEvent';
  function timeKillEvent(uTimerID: UINT): UINT; stdcall; external 'winmm.dll' name 'timeKillEvent';

procedure Ontmr2(uTimerID, uMessage: uint;dwUser, dw1, dw2: dword) stdcall;
begin
 //server1.ICQClient1.SendMessage(номер кому, '111') //проверка loggedin- уже есть в компоненте
end;
procedure timer_create;
begin
 tmr2:= timesetevent(2000,0,@Ontmr2,0,1)
end;
procedure timer_destroy;
begin
 timeKillEvent(tmr2)
end;

procedure icqsock.MessageRecv(Sender: TObject; Msg, UIN: String);
begin
 server1.ICQClient1.SendMessage(strtoint(uin), '333') //проверка loggedin- уже есть в компоненте
end;  
constructor icqsock.Create;
Begin
 inherited Create;
 ICQClient1:= TICQClient.Create(nil);
 ICQClient1.OnMessageRecv:= MessageRecv
End;
destructor icqsock.Destroy;
Begin
 ICQClient1.Free;
 inherited Destroy
End;
//========================================================


begin
 timer_create;
 Server1:= icqsock.Create;

 with server1.ICQClient1 do begin
  ConvertToPlaintext := true;
  Avatars            := false;
  ConnectionTimeout  := 0;
  ICQPort            := 5190;
  ICQPortViaHTTP     := 80;
  ICQServer          := 'login.icq.com';
  ICQServerViaHTTP   := 'http.proxy.icq.com';
  PortRangeFirst     := 3000;
  PortRangeLast      := 50000;

  //p:= true;
  if p then begin
   ProxyType         := P_HTTPS;
   ProxyResolve      := true;
   ProxyAuth         := true;
   ProxyUserID       := 'user';
   ProxyPass         := 'userpass';
   ProxyHost         := 'ip';
   ProxyPort         := port;
  end else begin
   ProxyType         := p_none;
   ProxyResolve      := false;
   ProxyAuth         := false;
   ProxyUserID       := '';
   ProxyPass         := '';
   ProxyHost         := '';
   ProxyPort         := 0;
  end;
  SecureLogin        := true;
  TypingNotifications:= false;
  UIN                := номер бота;
  Password           := 'пароль бота';

  try Login($10000000);
  except end
 end;

 //
 try while GetMessage(Msg, 0, 0, 0) do begin
  TranslateMessage(Msg);
  DispatchMessage(Msg)
 end
 finally Server1.Free; timer_destroy end
end.
пользуйте на здоровье...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с icq D_E_N Работа с сетью в Delphi 1 26.10.2009 14:10
ICQ Alex2009 Работа с сетью в Delphi 2 30.06.2009 16:46
icq sergei64_89 Общие вопросы .NET 1 25.10.2008 04:54
ICQ SunKnight Работа с сетью в Delphi 4 20.01.2008 01:17