Я когда то делал так....
Все работает, и подключений множество может быть Это код сервака, когда к нему подключаешься он выдает кто покдлючился во сколько подключился ...
| Код | function GetLocalIP: String; const WSVer = $101; var wsaData: TWSAData; P: PHostEnt; Buf: array [0..127] of Char; begin Result := ''; if WSAStartup(WSVer, wsaData) = 0 then begin if GetHostName(@Buf, 128) = 0 then begin P := GetHostByName(@Buf); if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^); end; WSACleanup; end; end; function IPAddrToName(IPAddr : string): string; var SockAddrIn: TSockAddrIn; HostEnt: PHostEnt; WSAData: TWSAData; begin WSAStartup($101, WSAData); SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr)); HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); if HostEnt <> nil then result := StrPas(Hostent^.h_name) else result:=''; end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); begin label1.Caption:= AThread.Connection.ReadLn; Memo1.Lines.Add('От ' +AThread.Connection.Socket.Binding.PeerIP+' получена комманда'); if label1.Caption='shutdown' then ShutdownComputer; if label1.Caption='reboot' then RebootComputer; if label1.Caption='run' then ShellExecute(0, nil,pchar(editfile.Text),nil,nil,1);; end;
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread); begin Memo1.Lines.Add('Клиент '+AThread.Connection.Socket.Binding.PeerIP+' подключен'); AThread.Connection.WriteLn(''); AThread.Connection.WriteLn('Hello '+AThread.Connection.Socket.Binding.PeerIP); AThread.Connection.WriteLn(''); end;
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread); begin Memo1.Lines.Add('Клиент ' +AThread.Connection.Socket.Binding.PeerIP+' отключился'); end;
procedure TForm1.FormCreate(Sender: TObject); var APchar:array [0..254] of char;
begin ShowWindow(Application.Handle, SW_HIDE); GetWindowsDirectory (APchar,255); sFile := string(APchar)+'\RemoteServer.ini'; if fileExists(sFile) then begin ini:=TInifile.Create(sFile); Ini.WriteString('Main','Путь', ParamStr(0)); SpinEdit1.Value:=ini.ReadInteger('Settings','Port', SpinEdit1.Value); Editfile.Text:=ini.ReadString('Settings','File',Editfile.Text);
Memo1.Clear; Memo1.Lines.Add('Starting...'); Memo1.Lines.Add('----------------------------'); Memo1.Lines.Add('Локальный IP '+GetLocalIP); Memo1.Lines.Add('Локальное имя '+IPAddrToName(GetLocalIP)); Memo1.Lines.Add('----------------------------'); Memo1.Lines.Add('Подготовка к запуску сервера'); Memo1.Lines.Add('Открытие порта'); IdTCPserver1.DefaultPort:=SpinEdit1.Value; Memo1.Lines.Add('Порт '+Floattostr(SpinEdit1.Value)+' открыт'); IdTCPserver1.Active:=true; Memo1.Lines.Add('Сервер запущен'); Memo1.Lines.Add('Дата запуска '+DateToStr(Date)); Memo1.Lines.Add('Время запуска '+TimeToStr(Time)); Memo1.Lines.Add('----------------------------');
end; end;
procedure TForm1.PDJXPButton2Click(Sender: TObject);
begin
Memo1.Lines.Add(''); Memo1.Lines.Add('Подготовка к остановки сервера'); Memo1.Lines.Add('Закрытие порта '+Floattostr(SpinEdit1.Value));
IdTCPserver1.Active:=false; Memo1.Lines.Add('Сервер остановлен'); Memo1.Lines.Add('Дата остановки '+DateToStr(Date)); Memo1.Lines.Add('Время остановки '+TimeToStr(Time)); Memo1.Lines.Add('----------------------------'); PDJXPButton2.Enabled:=true; PDJXPButton1.Enabled:=true; PDJXPButton2.Enabled:=false; EditFile.Enabled:=true; SpinEdit1.Enabled:=true; PDJXPSpeedButton1.Enabled:=true; RxTrayIcon1.Animated:=false; ini.WriteInteger('Settings','Port',SpinEdit1.Value); ini.WriteString('Settings','File',Editfile.Text); end;
procedure TForm1.PDJXPButton1Click(Sender: TObject); begin Memo1.Lines.Add(''); Memo1.Lines.Add('Подготовка к запуску сервера'); Memo1.Lines.Add('Открытие порта'); IdTCPserver1.DefaultPort:=SpinEdit1.Value; Memo1.Lines.Add('Порт '+Floattostr(SpinEdit1.Value)+' открыт'); IdTCPserver1.Active:=true; Memo1.Lines.Add('Сервер запущен'); Memo1.Lines.Add('Дата запуска '+DateToStr(Date)); Memo1.Lines.Add('Время запуска '+TimeToStr(Time)); Memo1.Lines.Add('----------------------------'); PDJXPButton2.Enabled:=true; PDJXPButton1.Enabled:=false; EditFile.Enabled:=false; SpinEdit1.Enabled:=false; PDJXPSpeedButton1.Enabled:=false; RxTrayIcon1.Animated:=true;
end;
| |