Интеpнетчик возвpащается поздно домой. Его встpечают двое гpомил.
Один из них достает нож и говоpит:
- Гони деньги!
"Пpовайдеpы",- подумал интеpнетчик.
{... Здесь идет заголовок файла и определение
формы 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 dobegin
ServerSocket1.Socket.Connections[i].SendText(Edit1.Text);
end;
Memo1.Lines.Insert(0,'< '+Edit1.Text);
end;
Это приложение на языке Delphi, демонстрирующее отправку и получение сообщений с помощью сокетов. Оно является примером клиент-серверной коммуникации, где сервер запущен на том же компьютере, что и клиент.
Приложение имеет три кнопки:
Кнопка 1: Запустить сервер
Кнопка 2: Остановить сервер
Кнопка 3: Отправить сообщение всем подключенным клиентам
Когда вы нажимаете на кнопку 1, сервер начинает слушать порт 1025 и отображает сообщение в Memo2, указывающее, что он запущен. Когда клиент подключается, сервер принимает подключение и отображает сообщение в Memo2, указывающее, что клиент был принят.
Когда вы вводите сообщение в Edit1 и нажимаете на кнопку 3, сообщение отправляется всем подключенным клиентам. Полученные сообщения отображаются в Memo1.
Вот разбивка кода:
Единица TForm1 содержит основную форму с тремя кнопками.
Процедура Button1Click запускает сервер, установливая его порт на 1025 и открывая его.
Процедура Button2Click останавливает сервер, устанавливая свой активный свойство в False.
Процедуры ServerSocket1Listen, ServerSocket1Accept, ServerSocket1ClientConnect, ServerSocket1ClientDisconnect и ServerSocket1ClientError обрабатывают события, связанные с сервером, такие как ожидание входящих подключений, принятие клиентов и обработка ошибок.
Процедура ServerSocket1ClientRead вызывается, когда клиент отправляет сообщение, которое затем отображается в Memo2.
Процедура ServerSocket1ClientWrite вызывается, когда сервер хочет отправить данные обратно клиенту.
Процедура Button3Click отправляет сообщение из Edit1 всем подключенным клиентам.
Обратите внимание, что это пример использует компонент TCustomWinSocket, который является обёрткой вокруг Windows Sockets API (WSock). Он предоставляет более дружественный способ работы с сокетами в Delphi.
В статье рассматривается пример создания сервера для приема и отправки сообщений через сокеты в Delphi, а также реализация методов для работы с клиентами.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.