ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Delphi, задачка
  #1  
Старый 14.07.2007, 22:24
Knight_of_Darkness
Познающий
Регистрация: 03.02.2007
Сообщений: 94
Провел на форуме:
267066

Репутация: 165
По умолчанию Delphi, задачка

Вот бьюсь над реализацией одной задачи. Нужно проверить, можно ли приконнектиться к 80 порту удаленной машины или нет. Пытался разными способами... Ставил сокетный клиент и обрабатывал OnConnect, пытался ставить таймер, обрабатывать Connected.. Вобщем, если кто-то предложит готовый рабочий пример, снимаю шляпу..
 
Ответить с цитированием

  #2  
Старый 15.07.2007, 01:00
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

1. Кидаешь на форму TcpClient
2. Указываешь порт 80
3. обрабатываешь событие OnConnect

не работает?? о_О
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #3  
Старый 15.07.2007, 01:05
Knight_of_Darkness
Познающий
Регистрация: 03.02.2007
Сообщений: 94
Провел на форуме:
267066

Репутация: 165
По умолчанию

пробовал, в случае удачного коннекта выдает асинхронную ошибку 10060.
 
Ответить с цитированием

  #4  
Старый 15.07.2007, 01:21
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

обработка события OnError
ErrorCode:=0;

и все
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #5  
Старый 15.07.2007, 03:59
Kpeamop
Новичок
Регистрация: 04.01.2007
Сообщений: 24
Провел на форуме:
100525

Репутация: 46
Отправить сообщение для Kpeamop с помощью ICQ
По умолчанию

Цитата:
1. Кидаешь на форму TcpClient
2. Указываешь порт 80
3. обрабатываешь событие OnConnect
нафига эти компаненты TcpClient, когда можно нормально замутить,
вот готовый пример, если че тока модифицируй его:

Код:
program connect;

uses
  sysutils, winsock;

var  D:WSAData;
     S:TSocket;
     A:TSockAddr;
begin
if WSAStartup($101,D)<>0 then halt;
{Определяем тип семейства сокетов, и IP адрес}
A.sin_family:=AF_INET;
A.sin_addr.S_addr:=inet_addr('127.0.0.1');
{ Создаем сокет }
  S:=socket(AF_INET,SOCK_STREAM,0);
  { Если возвращено значение INVALID_SOCKET, выводим сообщение об ошибке }
  if S=INVALID_SOCKET then halt;
  { Определяем порт (задается константой) }
  A.sin_port:=htons(80);
  { Пытаемся подконнектиться, если удачно - выводим сообщение, что порт открыт }
  if connect(S,A,sizeof(A))=0 then ;{ВОТ ТУТ ПОДСОЕДИНИЛИСЬ ИНАЧЕ НЕТ}
  closesocket(S);
{ Завершаем работу с сокетами }
WSACleanup;
end.

Последний раз редактировалось Kpeamop; 15.07.2007 в 04:03..
 
Ответить с цитированием

  #6  
Старый 15.07.2007, 04:30
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

Kpeamop боян??!?!
что я не решил задачу?? о_О
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #7  
Старый 15.07.2007, 06:36
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Код:
function PingPort(host: string; portnum: word; tim: integer): boolean;
var
  s, opt: Integer;
  FSocket: TSOCKET;
  busy : boolean;
  addr : TSockAddr;
  hEvent : THandle;
  fset : TFDset;
  tv : TTimeval;
  GInitData : TWSADATA;

function LookupName(host: string): TInAddr;
var
  HostEnt: PHostEnt;
  InAddr: TInAddr;
begin
  HostEnt := gethostbyname(PChar(host));
  FillChar(InAddr, SizeOf(InAddr), 0);
  if HostEnt <> nil then
    begin
      with InAddr, HostEnt^ do
        begin
          S_un_b.s_b1 := h_addr^[0];
          S_un_b.s_b2 := h_addr^[1];
          S_un_b.s_b3 := h_addr^[2];
          S_un_b.s_b4 := h_addr^[3];
        end;
    end;
  Result := InAddr;
end;

begin
  result := false;
  WSAStartup(MAKEWORD(2,0), GInitData);
  addr.sin_family := AF_INET;
  addr.sin_addr.s_addr := INADDR_ANY;
  addr.sin_port := htons(portnum);
  hEvent := WSACreateEvent();
  busy:=false;
  FSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  WSAEventSelect(FSocket, hEvent, FD_WRITE + FD_CONNECT);
  addr.sin_addr := LookupName(host);
  connect(FSocket, @addr, sizeof(addr));
  if WSAGetLastError()=WSAEINPROGRESS then
    begin
      closesocket (FSocket);
      busy:=true;
    end;
  FD_Zero(fset);
  if busy <> true then
    FD_SET (FSocket, fset);
  tv.tv_sec := tim;
  tv.tv_usec := 0;
  s:=select (1, nil, @fset, nil, @tv);
  if busy then
    exit;
  if FD_ISSET (FSocket, fset) then
    begin
      s:=Sizeof(Opt);
      opt:=1;
      getsockopt(FSocket, SOL_SOCKET, SO_ERROR, @opt, s);
      if opt=0 then
        result := true;
      closesocket(FSocket);
    end;
  WSACloseEvent(hEvent);
  WSACleanup;
end;

procedure main;
begin
  if PingPort('ya.ru', 80, 2) then
    messagebox(0,'Порт открыт', nil, mb_ok or mb_iconinformation);
end;
Уже выкладывал на форуме. Продвинутая функция сканирования порта. Третий параметр - таймаут в секундах. В большинстве случаев одной секунды хватает, чтобы определить, открыт порт или нет. Зависимость - winsock2, думаю, обертка для делфни есть у любого уважающего себя программера.

Последний раз редактировалось Joker-jar; 15.07.2007 в 06:37.. Причина: Лишние переменные удалил :)
 
Ответить с цитированием

  #8  
Старый 15.07.2007, 09:57
Knight_of_Darkness
Познающий
Регистрация: 03.02.2007
Сообщений: 94
Провел на форуме:
267066

Репутация: 165
По умолчанию

Так, ладн.. всем спасибо. Дуйствующий пример подсказал первым W!z@rd, за что ему ставлю плюс...
 
Ответить с цитированием

  #9  
Старый 15.07.2007, 10:11
gemaglabin
Banned
Регистрация: 01.08.2006
Сообщений: 725
Провел на форуме:
7681825

Репутация: 4451


По умолчанию

Виз подсказал способ типа "работает а и йух с ним" , так лучше не делать.Рабочие примеры тебе дали
 
Ответить с цитированием

  #10  
Старый 15.07.2007, 21:24
Knight_of_Darkness
Познающий
Регистрация: 03.02.2007
Сообщений: 94
Провел на форуме:
267066

Репутация: 165
По умолчанию

Виз, есть еще трабла

поставил indy-компонент, посылаю get-запрос и смотрю сорец. Но если натыкаюсь на 404 он ругается и вылетает.
Как вообще отлавливать ошибки в IdHTTP? Не находил такого. На низкий уровень пока переходить не хочу, т.к. я всё-таки не сканер пишу.

Последний раз редактировалось Knight_of_Darkness; 16.07.2007 в 09:18..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Small Delphi begin_end С/С++, C#, Delphi, .NET, Asm 10 11.11.2008 10:40
Borland выпускает Delphi для PHP. fYt Мировые новости 19 17.06.2008 21:17
Простейший IRC-клиент на Delphi, средствами INDY. begin_end Авторские статьи 0 07.03.2007 14:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ