Показать сообщение отдельно
  #6  
Старый 29.10.2010, 20:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Пишешь клиента и сервера, хоть на WinSock. клиенты - на компах с проекторами. сервер - у тебя. Сначала подключаешься к серверу со всех трех компов, потом при нажатии на кнопку на сервере - отсылает всем троим например "1". Клиент же как только получает этот заветный "1" ставит мышь на кнопку PLAY в виндус медия плеере и жмет на нее.

пример на апи:
Сервер:
Код:
uses WinSock;

var 
    sServer: TSOCKET
    sClient: array[0..2] of TSOCKET;
    serverAddr, clientAddr: sockaddr_in;
    isize, i : integer;

...

begin
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then
    ;

  sServer := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  if sServer = INVALID_SOCKET then
  begin
    Form19.Memo1.Lines.add('Ошибка создания сокета');
    exit;
  end;

  imode := 1;
  iOcTLsocket(sServer, FIONBIO, imode);

  serveraddr.sin_addr.S_addr := htonl(INADDR_ANY);
  serveraddr.sin_family := AF_INET;
  serveraddr.sin_port := htons(12345);  // порт, любой

  if bind(sServer, serveraddr, sizeof(serveraddr)) = SOCKET_ERROR then
  begin
    Form19.Memo1.Lines.add('Ошибка бинд');
    exit;
  end;

  if listen(sServer, 4) = SOCKET_ERROR then
  begin
    Form19.Memo1.Lines.add('Ошибка прослушки');
    exit;
  end;

  Form19.Memo1.Lines.add('Server Started');

  isize := sizeof(clientaddr);

  for i:=0 to 2 do
  begin
    sClient[i]:=accept(sServer,clientaddr,isize)
    Form19.Memo1.Lines.Add('Подключен клиент '+inttostr(i));
  end;
end;

потом при нажатии кнопки пишешь
Код:
var i,j:byte;
...
j:=1;
for i:=0 to 2 do
   send(sClient[i],j,1,0);
...

Клиент:
Код:
uses WinSock;
...
var 
   addr:sockaddr_in;
   sClient:TSOCKET;
   isize:integer;
   j:byte;
...

begin
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then
    ;
sClient:=socket(AF_INET, SOCK_STREAM,IPPROTO_IP);
if sClient = INVALID_SOCKET then
begin
  Form1.Memo1.Lines.Add('Ошибка создания сокета');
  exit;
end;
Dword(аddr.sin_addr.S_un_b) := inet_addr(PAnsiChar(st)); // st - строка с текстовым представлением IP-адреса типа '192.168.1.1'. З.Ы. лучше поискать другой метод :-) 
addr.sin_family := AF_INET;
addr.sin_port := htons(12345); // тот же порт, что на сервере

if (connect(sClient, addr, sizeof(addr)) = socket_error) then
  begin
    Form1.Memo1.Lines.Add('Ошибка подключения');
    exit;
  end;

isize := recv(sClient, j, 1, 0);
if j = 1 then
begin
//запускаем наш плеер
end;
end;

не пугаться - клиент будет выглядеть "зависшим" пока к нему не придут данные, а сервер - пока к нему не подключатся все три клиента.
Это простейший вариант на АПИ. Взято по большей части из книжки Фленова "Делфи глазами хакера".
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием