Delphi tcp/ip - и мой пк!

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by LeonW, 11 Oct 2005.

  1. LeonW

    LeonW New Member

    Joined:
    11 Oct 2005
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    Привет всем!
    моя компания использует проксхи - ну да ладно, сразу к делу!
    как сделать программу в Delphi которая:
    1) определяет мой ip
    2) опредиляет время загрузки самой себя?
    3) посылает мне на мыло эти данные!
    4) закрывается до следующей загрузки пк.
    посибо Leon :confused:
     
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Ну айпи твой всегда почти 127.0.0.1 так что можешь смело вбивать это значение.
    Время загрузки самой себя... Что ты понимаешь под загрузкой? Время с запуска EXE по создание окна? Тогда вызывай old_time = time( NULL ); и в конце elapsed_time = time(NULL)-old_time; только переведи это на паскаль. На мыло посылать очень просто через SMTP.
    Code:
    int s;
    struct sockaddr_in s_a;
    
    s = socket( AF_INET, SOCK_STREAM, 0 );
    s_a.sin_family = AF_INET;
    s_a.sin_port   = htons( 25 );
    s_a.sin_addr.s_addr = inet_addr( "[тут ip мейл.ру например]" );
    if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 0;
    
    (создай корчое сокет соединения с почтовым сервером на 25 порту)
    и посылай
    (сервак должен посылать 250 Ok)
    HELO имя_домена\r\n
    MAIL FROM: <[email protected]>\r\n
    RCPT TO: <[email protected]>\r\n
    DATA\r\n
    \r\n
    [DATA]
    . (ТОЧКА!)

    если не ошибаюсь...
    коды возврата SMTP
    211 system status, or system helo reply
    214 Help message....
    220 <domain> service ready
    221 <domain> service closing transmission channel
    250 Requested mail action okay, completed
    251 User to local; will forward to <forward-path>
    354 Start with input; end with <CRLF>.<CRLF> (\r\n)
    421 <domain> service not avialable (пошел нафиг типа)
     
  3. LeonW

    LeonW New Member

    Joined:
    11 Oct 2005
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    e-mail

    KEZ - привет! понажимал я на твои ссылки.
    я только начал заниматся с delphi! поэтому не все понил что ты там написал?
    а 127,0,0,1 - это не тот ip -сегодня был на сайте - где опредиляют ip - и мне показали совсем другой! :confused:
     
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Вот ф-ия опеределия своего айпи в интернете

    Code:
    char *SelfIP( void )
    {
    	char *temp = (char*)malloc( 256 );
    	struct in_addr in;
    
    	DWORD       ip = 0;
    	LPHOSTENT   he;
    
    	if (!gethostname( temp, 256 ))
    	{
    		if (he = gethostbyname( temp ))
    		ip = ((LPIN_ADDR)he->h_addr)->s_addr;
    	}
    
    	memcpy( &in.s_addr, he->h_addr, he->h_length );
    	
    	return inet_ntoa( in );
    }
    
    теперь переведи это на паскаль и получишь код для Delphi
     
    #4 KEZ, 12 Oct 2005
    Last edited: 12 Oct 2005
  5. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    и не забудь

    WSADATA wsadata;
    WSAStartup( MAKEWORD( 1, 1 ), &wsadata );
    а в конце
    WSACleanup();

    в линуксе сеть используется без подобных ф-ия а в винде у тебя сокет даже не создасться без них
     
  6. LeonW

    LeonW New Member

    Joined:
    11 Oct 2005
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    pascal

    а как переветси на паскаль???
     
  7. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Это тебе решать как переводить, код я тебе дал.
     
  8. bul666

    bul666 Banned

    Joined:
    21 Apr 2005
    Messages:
    280
    Likes Received:
    8
    Reputations:
    -1
    Стукни мне в Асю или На мыло ([email protected]) Я тебе на C++ Напишу )))
     
  9. LeonW

    LeonW New Member

    Joined:
    11 Oct 2005
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    cpp

    Привет! посибо но на с++ не надо. пожалуйста!
    но все ровно спосибо!
    -------------------------------------------------------------------
    а какие последствия могут быть - если я свой ip - буду
    отпровлять себеже на email>>??????????? :rolleyes:
     
  10. Raider

    Raider Elder - Старейшина

    Joined:
    2 May 2005
    Messages:
    40
    Likes Received:
    5
    Reputations:
    4
    procedure TForm1.Button1Click(Sender: TObject);
    var
    WSAData: TWSAData;
    HostEnt: PHostEnt;
    LocalIP: String;
    Buff: array [0..MAX_COMPUTERNAME_LENGTH] of Char;
    begin
    FillChar(Buff, SizeOf(Buff), 0);
    WSAStartUp($0101, WSAData);
    GetHostName(Buff, SizeOf(Buff));
    HostEnt := GetHostByName(Buff);
    LocalIP := inet_ntoa(PInAddr(HostEnt.h_addr_list^)^);
    ShowMessage(LocalIP); // ip
    WSACleanUP();
    end;

    Событие OnCreate (у формы) происходит в момент создания:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ShowMessage(TimeToStr(Time)); // время
    end;

    Афтор, ты на Delphi пишешь или на чём то другом ? Оглянись, там куча компонентов, если ты пишешь на 7-ом
    и выше, то для отправки почты есть компонент TidSTMP, или чтотто в этом роде ... а на Api писать имхо
    рановато те ...

    Halt, но вобщето правельней Application.Terminate, хотя пох как )

    Пропишись в автозагрузку, в реестр, как работать с реестром ты найдёшь в инэте.

    ps
    Все твои вопросы это FAQ, так что прежде чем спросить не поленись и поискать.


    Серьёзные последствия, вплоть до остановки smtp сервака LOL ))))
     
    #10 Raider, 14 Oct 2005
    Last edited: 14 Oct 2005
  11. LeonW

    LeonW New Member

    Joined:
    11 Oct 2005
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    ok

    Ok - спосибо! Да = delphi изучаю! :)