Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Wake On Lan 
:(
    Опции темы
Illusion Dolphin
  Дата 24.10.2004, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Как сделать сабж? Т.е. нужно включить через сеть удалённый компьютер. Мама и сетевуха вроде это дело поддерживают, надо только, насколькоя я понимаю, послать широковещательный пакет, но как это сделать и что посылать - точно не знаю. Подскажите, пожалуйста.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Illusion Dolphin
Дата 26.10.2004, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Никто не в курсе? Тогда помогите хотя бы с си перевести:

Код


#include <stdio.h>
#include <conio.h>
#pragma comment (lib,"WS2_32.lib")

#define MACLEN 6        //6 BYTES
#define MESS_HEADER 6     //  6 BYTES
#define MESS_SIZE MESS_HEADER + 16 * MACLEN   //102 BYTES

BYTE StrToByte(TCHAR c) {

   if (_T('0') <= c && c <= _T('9')) return c - _T('0');
   if (_T('a') <= c && c <= _T('f')) return c - _T('a') + 10;
   if (_T('A')<= c && c <= _T('F')) return c - _T('A') + 10;
   return -1;
}

//Принимает MAC адрес в строковом значении, например "22446688AACC"
BOOL SendWOLPacket(CString& sMAC){

   //Инициализация WinSock
   WORD wVersion = MAKEWORD(2,2);
   WSADATA WSAData;
   if(WSAStartup(wVersion, &WSAData)) return FALSE;

   //создание сокета
   SOCKET S = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   if( INVALID_SOCKET == S){

       WSACleanup();
       return FALSE;
   }

   //установка опции, позволяющей посылать широковещательные сообщения
   char OptVal = 1;
   if(SOCKET_ERROR == setsockopt(S, SOL_SOCKET, SO_BROADCAST, &OptVal, sizeof(char))){

       WSACleanup();
       return FALSE;
   }

   //инициализация адреса
   SOCKADDR_IN addr;
   ZeroMemory(&addr, sizeof(SOCKADDR_IN));
   addr.sin_family = AF_INET;
   addr.sin_port = 9991; //для самой карточки порт не важен, но можно указать порт,
   //для которого разрешена посылка широковещательных сообщений в другие сегменты сети
   u_long nAddr = INADDR_BROADCAST;
   CopyMemory(&addr.sin_addr, &nAddr, sizeof(u_long));

   //формируем сообщение

   BYTE MessHeader[MESS_HEADER] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
   BYTE Message[MESS_SIZE];
   BYTE MAC[MACLEN];
   BYTE Val;

   ZeroMemory(Message,MESS_SIZE);
   CopyMemory(Message, MessHeader, MESS_HEADER);

   LPBYTE pDataPtr = Message + MESS_HEADER;

   //переводим строковый MAC адрес в числовое значение
   for(int nMacPos = 0, nStrPos = 0; nMacPos < MACLEN; nMacPos++){
       Val = Str2Byte(sMAC[nStrPos++]);
       Val <<= 4;
       Val |= Str2Byte(sMAC[nStrPos++]);
       MAC[nMacPos] = Val;
   }
   //добавления 16-кратно повторенного адреса
   for(int nTimes = 0; nTimes < 16; nTimes++, pDataPtr += MACLEN) CopyMemory(pDataPtr, MAC, MACLEN);
   //отправка сообщения
   BOOL bRez = ( MESS_SIZE == sendto(S, (const char*)Message, MESS_SIZE, MSG_DONTROUTE,
       (LPSOCKADDR)&addr, sizeof(SOCKADDR)));

   WSACleanup();
   return bRez;
}




--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 26.10.2004, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



Вот попробуй, но сам я не проверял:

Код
function StrToByte(const c: Char): Byte;
begin
 if ('0' <= c) and (c <= '9') then
   Result := Ord(c) - Ord('0')
 else
 if ('a' <= c) and (c <= 'f') then
   Result := Ord(c) - Ord('a') + 10
 else
 if ('A' <= c) and (c <= 'F') then
   Result := Ord(c) - Ord('A') + 10;
end;

function SendWOLPacket(const sMac: string): Boolean;
const
 MESS_HEADER = 6;
 MACLEN = 6;
 MES_SIZE = MESS_HEADER + 16 * MACLEN;

var
 WSAData: TWSAData;
 s: TSocket;
 OptVal: AnsiChar;
 addr: TSockAddrIn;
 nAddr: integer;
 MessHeader: array[0..MESS_HEADER - 1] of Byte;
 Message: array[0..MES_SIZE - 1] of Byte;
 Mac: array[0..MACLEN - 1] of Byte;
 Val: Byte;
 nMacPos, nStrPos, nTimes: integer;
 pDataPtr: PByte;
 bRez: Boolean;
begin
 if WSAStartUp(MAKEWORD(2, 2), WSAData) <> 0 then
   Exit;

 s := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 if s = INVALID_SOCKET then
 begin
   WSACleanUp;
   Exit;
 end;

 OptVal := Chr(1);
 if setsockopt(s, SOL_SOCKET, SO_BROADCAST, @OptVal, sizeof(AnsiChar)) = SOCKET_ERROR then
 begin
   WSACleanUp;
   Exit;
 end;

 ZeroMemory(@addr, SizeOf(TSockAddrIn));
 addr.sin_family := AF_INET;
 addr.sin_port := 9991;
 nAddr := INADDR_BROADCAST;
 CopyMemory(@addr.sin_addr, @nAddr, sizeof(Integer));

 FillChar(MessHeader, 6, $FF);

 ZeroMemory(@Message, MES_SIZE);
 CopyMemory(@Message, @MessHeader, MESS_HEADER);

 nStrPos := 0;
 for nMacPos := 0 to MACLEN - 1 do
 begin
   Val := StrToByte(sMAC[nStrPos]);
   Inc(nStrPos);
   Val := Val shl 4;
   Val := Val or StrToByte(sMAC[nStrPos]);
   Inc(nStrPos);
   MAC[nMacPos] := Val;
 end;

 pDataPtr := PByte(DWORD(@Message) + MESS_HEADER);
 for nTimes := 0 to 15 do
 begin
   Inc(pDataPtr, MACLEN);
   CopyMemory(pDataPtr, @MAC[0], MACLEN);
 end;
 //îòïðàâêà ñîîáùåíèÿ
 bRez := (MES_SIZE = sendto(s, Message, MES_SIZE, MSG_DONTROUTE,
   addr, sizeof(TSOCKADDR)));

 WSACleanup();
 Result := bRez;
end;


Это сообщение отредактировал(а) <Spawn> - 26.10.2004, 14:29


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.