Программирование на Delphi - обмен опытом / Сети

© Зайцев Олег 1998-2004
Лучшая портативная техника. Плееры Камеры Телефоны Компьютеры
Покупателям, пришедшим на www.porta.ru по этой ссылке - дополнительная скидка 1%
Железо | Система | WEB | Компоненты | Графика | Ссылки | Мультимедиа | Сети | Прочее | Реестр | Литература

Статистика

Сети

Советы по программированию сетей (локальных сетей и Интернет)

Рекомендую:
Главная страница \ Сети

  • Сетевые ресурсы
  • Как проверить, есть ли соединение с Интернет
  • Определение IP адреса и имени хоста
  • Отправка сообщения по сети (NetSend)
  • Загрузка ресурсов из Интернет
    Определение IP адреса и имени хоста * * Задать вопрос Наверх
    Типовая реализация имеет вид:
    var
     WSAData  : TWSAData;
     HostName : array [0..MAX_COMPUTERNAME_LENGTH] of сhar;
     HostEnt  : PHostEnt;
    begin
     // Инициализируем winsock
     WSAStartup($0101, WSAData);
     // Получаем имя хоста
     GetHostName(HostName, SizeOf(HostName));
     // Получаем адрес по имени
     HostEnt := GetHostByName(HostName);
     if HostEnt <> nil then begin
      Memo1.Lines.Add('Имя хоста = ' + Trim(HostName));
      Memo1.Lines.Add('IP = ' + inet_ntoa(PInAddr(HostEnt.h_addr_list^)^));
     end;
     WSACleanup;
    end;
    

    Отправка сообщения по сети (NetSend) * * Задать вопрос Наверх
    Мне известно два способа:
    1. При помощи функции API NetMessageBufferSend

    NET_API_STATUS NetMessageBufferSend(
        LPTSTR servername,	
        LPTSTR msgname,	
        LPTSTR fromname,	
        LPBYTE buf,	
        DWORD buflen	
       );	
    
    где

    2. При помощи отправки сообщения через mailslot\messngr

    procedure TMain.SendNetMessage(AHost, AFromSt, AToSt, AMessageSt : string);
    var
     hSlot : THandle;
     s     : string;
     cb    : DWORD;
    begin
     // Открыли mailslot с именем "messngr"
     hSlot := CreateFile(PChar('\\'+AHost+'\mailslot\messngr'),
        GENERIC_WRITE, FILE_SHARE_READ, 0,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
     // mailslot открыт ?? Нсли да, то отправляем сообщение
     if hSlot <> INVALID_HANDLE_VALUE then begin
       // Подготов ка сообщения (формат "от кого#0кому#0сообщение#0"
       AMessageSt := DecodeToDos(AMessageSt);
       s := AFromSt + #0 + AToSt + #0 + AMessageSt + #0;
       cb := length(S);
       WriteFile(hSlot, s[1], cb, cb, 0);
       CloseHandle(hSlot);
     end;
    end;
    
    Особенность данного примера состоит в том, что при тестировании на XP при указании в параметре AHost имени ПК все рабтало отлично, а при указании IP адреса - не срабатывало


    © Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA - Хостинг от AGAVA.ru