Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование Socketов в Delphi.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
153.6 Кб
Скачать

Практика и примеры

Итак, рассмотрим очень неплохой пример работы с TServerSocket (этот пример - наиболее наглядное пособие для изучения этого компонента). В приведенных ниже исходниках демонстрируется протоколирование всех важных событий сервера, плюс возможность принимать и отсылать текстовые сообщения:

Пример 1. Протоколирование и изучение работы сервера, посылка/прием сообщений через сокеты.

{... Здесь идет заголовок файла и определение формы TForm1 и ее экземпляра Form1}

procedure TForm1.Button1Click(Sender: TObject);

begin

{Определяем порт и запускаем сервер}

ServerSocket1.Port := 1025;

{Метод Insert вставляет строку в массив в указанную позицию}

Memo2.Lines.Insert(0,'Server starting');

ServerSocket1.Open;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

{Останавливаем сервер}

ServerSocket1.Active := False;

Memo2.Lines.Insert(0,'Server stopped');

end;

procedure TForm1.ServerSocket1Listen(Sender: TObject;

Socket: TCustomWinSocket);

begin

{Здесь сервер "прослушивает" сокет на наличие клиентов}

Memo2.Lines.Insert(0,'Listening on port '+IntToStr(ServerSocket1.Port));

end;

procedure TForm1.ServerSocket1Accept(Sender: TObject;

Socket: TCustomWinSocket);

begin

{Здесь сервер принимает клиента}

Memo2.Lines.Insert(0,'Client connection accepted');

end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

{Здесь клиент подсоединяется}

Memo2.Lines.Insert(0,'Client connected');

end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

{Здесь клиент отсоединяется}

Memo2.Lines.Insert(0,'Client disconnected');

end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

{Произошла ошибка - выводим ее код}

Memo2.Lines.Insert(0,'Client error. Code = '+IntToStr(ErrorCode));

end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

begin

{От клиента получено сообщение - выводим его в Memo1}

Memo2.Lines.Insert(0,'Message received from client');

Memo1.Lines.Insert(0,'> '+Socket.ReceiveText);

end;

procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;

Socket: TCustomWinSocket);

begin

{Теперь можно слать данные в сокет}

Memo2.Lines.Insert(0,'Now can write to socket');

end;

procedure TForm1.ServerSocket1GetSocket(Sender: TObject; Socket: Integer;

var ClientSocket: TServerClientWinSocket);

begin

Memo2.Lines.Insert(0,'Get socket');

end;

procedure TForm1.ServerSocket1GetThread(Sender: TObject;

ClientSocket: TServerClientWinSocket;

var SocketThread: TServerClientThread);

begin

Memo2.Lines.Insert(0,'Get Thread');

end;

procedure TForm1.ServerSocket1ThreadEnd(Sender: TObject;

Thread: TServerClientThread);

begin

Memo2.Lines.Insert(0,'Thread end');

end;

procedure TForm1.ServerSocket1ThreadStart(Sender: TObject;

Thread: TServerClientThread);

begin

Memo2.Lines.Insert(0,'Thread start');

end;

procedure TForm1.Button3Click(Sender: TObject);

var i: Integer;

begin

{Посылаем ВСЕМ клиентам сообщение из Edit1}

for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin

ServerSocket1.Socket.Connections[i].SendText(Edit1.Text);

end;

Memo1.Lines.Insert(0,'< '+Edit1.Text);

end;