Delphi. Учимся на примерах | страница 67
>procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
>begin
> ShowMessage('Connected!'); //показать сообщение
>end;
Для реализации аналогичного действия при отсоединении от сервера, следует создать обработчик события OnDisconnect:
>procedure TForml.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
>begin
> ShowMessage('Disconnected!'); //сообщение при отсоединении
>end;
Теперь обработаем событие OnTimer для компонента Timer:
>procedure TForm1.Timer1Timer(Sender: TObject);
>var
> cur:TPoint; //хранит координаты указателя мыши
>begin
> GetCursorPos(cur); //узнаем координаты указателя мыши
> //отправляем данные на сервер
> Client.Socket.SendText(IntToStr(cur.X) +'_' + IntToStr(cur.Y));
>end;
Каждые полсекунды мы будем получать координаты указателя мыши и отправлять их на сервер. Программа-клиент полностью готова. Теперь разработаем программу-сервер.
Разработка серверной программы
Создайте новый проект Delphi. Разместите на форме главный компонент программы — ServerSocket категории Internet и измените значение его свойства Port на 2801.
Первым делом, обеспечим нашей форме невидимость. Создайте обработчик события формы OnPaint и добавьте в него следующий код:
>procedure TForm1.FormPaint(Sender: TObject);
>begin
> Form1.Hide;
>end;
Для того чтобы активизировать сервер при запуске программы, необходимо обработать событие формы OnCreate:
>procedure TForm1.FormCreate(Sender: TObject);
>begin
> ServerSocket1.Active:= True; //активизировать сервер
>end;
Для того чтобы при выходе из программы сервер отключался, необходимо обработать событие формы OnDestroy:
>procedure TForm1.FormDestroy(Sender: TObject);
>begin
> ServerSocket1.Active:= False; //отключаем сервер
>end;
Теперь осталось только обработать событие OnClientRead компонента ServerSocket. Это событие будет происходить каждый раз, когда будет поступать команда от клиента. Код обработчика этого события имеет следующий вид:
>procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
>var
> str, x, y: string; //полученный текст и координаты
> //указателя по X и по Y
> i, j: integer; //счетчики циклов
> begin
> //обнуляем координаты курсора
> х := ' ';
> у := ' ';
> str:= Socket.ReceiveText; //полученный от клиента текст
> for i:=1 to Length(str) do begin
> if str[i] <> '_' then x:= x + str[i]; //координаты по х
> if str[i] = '_' then Break; //разделитель между
> //координатами указателя
> end;
> for j:= i+1 to Length(str) do у:= y+str[j];