
Начало читайте в предыдущей статье под названием "Программирование сокетов"...
Теперь уже нужно виделить компоненты TServerSocket, и в Object Inspector на вкладке Events в событии onClientRead (это событие появляетя, когда клиент отсылает какие то данные серверу) пишем следующее:..
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
c,s:String;
FStream:TFileStream;
SF:Pchar;
begin
S:=FormatDateTime('hhmmss',TIme());//Здесь мы генерируем имя нашей картинки
c:=Socket.ReceiveText; //именно сюда записываются данные, которые пришли от клиента
if c='screen' then //если пришел запрос, и он отвечает нашим требованиям
begin
sf:=Pchar(s+'.bmp');
CopyScreen(Sf); //копируем содержимое экрана и сохраняем его
sendFile(sf); //отсылаем сохраненный файл
end;
end;
Сначало мы переменной S даем результат исполнения функции FormatDateTime(), в итоге получим строковое представление времени в системе, которое записано будет в переменную S — поскільку время постоянно изменяется, мы постоянно получать будем новое значение переменной. Потом проверяем, пришли ли данные от клиента — если да, тогда копируем экран и отправляем копию.
Теперь относительно клиента. Создаем новый проект и потом кидаем на форму компонент TClientSocket, а также TEdit,TListBox, Tbutton и Tlabel.
У свойства Port TClientSocket необходимо ввести значение порта, которое вы дали серверу, свойству Address надо указать IP-адрес сервера. Эту возможность мы выполняем с помощью компонента Edit1. В событии OnClick компоненте SpeedButton1 пишем следующее:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if edit1.Text<>'' then
begin
ClientSocket1.Address:=Edit1.Text; //заполняем свойство Address…
ClientSocket1.Active:=True; //…и активируем сокет
end;
end;
Думаю здесь должно быть все предельно ясно...
Socket: TCustomWinSocket);
begin
LIstBox1.Items.Add('Связь установлена з'+Edit1.Text+'успешно установленна!');
end;
Это событие возникает в том случае, когда клиент успешно установил связь с сервером
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText('screen');{Отсылаем серверу строку screen}
end;
После чего он должен сделать копию экрана и отправить ее нам
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s1,s:String;
begin
s:=Socket.ReceiveText; //принимаем данные
if reciving then //если есть что принимать
begin
fs.Write(s[1],length(s)); //записываем их
if fs.Size=DataSize then //если размер записанных данных равен размеру принятых
begin
fs.Free; //освобождаем поток
Reciving:=False; // останавливаем записывание
ShellExecute(handle,'open',Pchar(s2),nil,pchar(s2),SW_SHOW ) //запускаем то, что приняли
end;
end;
if copy(s,1,5)='Size:' then //если пришли размер и имя файла
begin
s1:=Copy(s,6,Pos('Name:',s)-6); //копируем сначало размер
DataSize:=StrToInt(s1);
Delete(s,1,Pos('Name',s)-1); //удаляем его с общих данных
if copy(s,1,5)='Name:' then
begin
s2:=Copy(s,6,Pos(#0,s)-6); //копируем имя
//shortName(s2);
Delete(s,1,Pos(#0,s)); //удаляєм его с общих данных
Reciving:=True; //переходим в режим записи в файл
begin
fs:=TfileStream.Create(s2,FmCreate); //создаем сам файл
fs.Write(s[1],length(s)); //и наконец, записываем данные
end;
end;
end;
end;
Когда сервер отослал нам данные, мы отфильтровываем имя и размер файла от собственно данных файла и в итоге получаем отправленную картинку.
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ListBox1.Items.Add('Связь прервана!');
end;
Это событие возникает тогда, когда прерывается связь
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ListBox1.Items.Add('Не могу соединится с сервером!!!!!');
ErrorCOde:=0;
end;
end.
А данное событие возникает тогда, когда сам клиент не может связатся с сервером.
Спонсор поста: имеете желание узнать больше о языке html? Заходите на интернет-ресурс barionics.com. У нас вы сможете не только узнать много интересных фактов о хтмл, но и получить новые знания по интересующих вопросах.