Автор: Валерий Ходоунский
Сперва создадим сервер. Создаём новый проект, Caption формы меняем на "Server". Добавляем на форму TSpinEdit (находится на вкладке "Samples", его лучше разместить где-нибудь вверху. Будет служить для указывания порта для коннекта клиента), TServerSocket (на вкладке "Internet", если этого компонента там не видно - выбираем Component -> Install packages, жмём кнопку Add и выбираем в диалоге в директории bin файл dclsockets70.bpl, и нажимаем Ok. Компоненты TClientSocket и TServerSocket должны появиться на вкладке "Internet"), TMemo (в нём будут отображаться сообщения, 2 TButton'а (один будет создавать сервер, другой - разрывать связь) и TEdit для отправки сообщений. Установите ServerType в StNonBlocking у TServerSocket'а.
Изменяем первому TButton'у Caption на "Активировать серв.". Пишем этой кнопке в обработчик OnClick:
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Port:=SpinEdit1.Value; // указываем порт
ServerSocket1.Active:=True; // активируем наш сервер
end;
Обработчик OnClick для кнопки, разрывающей коннект:
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Active:=False; // деактивируем сервер
end;
Теперь пишем обработчик для TEdit'a OnKeyPress
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var S: string;
begin
if Key = Chr(13) then // если нажали клавишу Enter...
begin
Key:=Chr(0);
S:=Edit1.Text; // то в строковую переменную записываем текст из TEdit'à...
Edit1.Clear; // очищаем поле
ServerSocket1.Socket.Connections[0].SendText(S); // и отправляем текст
Memo1.Lines.Add('< '+S);
end;
end;
Отправку сообщений сделали, теперь нужно организовать их приём. Для этого пишем обработчик OnClientRead у TServerSocket'а.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var Received: string;
begin
Received:=Socket.ReceiveText;
Memo1.Lines.Add('> '+Received);
end;
Теперь создадим реакцию на отключение клиента
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Клиент отсоединился');
end;
На этом закончим создание сервера. Сохраните проект и создайте новый.
Соотвественно новой форме изменяем Caption на "Клиент". Где-нибудь вверху формы разместим TEdit (будет для указания адреса сервера), TSpinEdit (будет указывать порт для подключения к серверу) и кнопку TButton, также как и для сервера, добавим TMemo и TEdit для отображения и отправки сообщений, и главный компонент - TClientSocket. Обработчик OnClick для кнопки, которая будет подключать:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host:=Edit1.Text;
ClientSocket1.Port:=SpinEdit1.Value;
ClientSocket1.Open;
end;
Теперь пишем обработчик OnKeyPress для Edit2:
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var Msg: string;
begin
if Key = #13 then
begin
Key:=#0;
Msg:=Edit2.Text;
Edit2.Clear;
with ClientSocket1.Socket do SendText(Msg);
Memo1.Lines.Add('< '+Msg);
end;
end;
Теперь организуем приём сообщений. Для этого пишем обработчик у ClientSocket-а OnRead:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('> '+Socket.ReceiveText);
end;
Собственно наш простейший чат готов. Можете протестировать его с помощью обратной петли: создайте сервер, например, с портом 5000, запустите клиент, укажите ему в поле для адреса сервера localhost (либо 127.0.0.1), порт 5000 и подсоединитесь.
Просмотров: 13799
Прекрасный, понятный материал. А ответ автора, на заявление о копипасте, - замечательный.
2 + 2 = 4 - фууу, это перепечатка материала, я это где-то уже видел!.. - да, действительно это уже где-то было (например в книжке по математике за 1-ый класс), однако это вовсе не значит, что это заявление (2+2=4) - не верное, просто по другому, это писать сложнее (1+1) + (1+1) = 1+1+1+1 |
3. Vucnait
Автор ты вместо Memo написал RichEdit вот такая вродь должна быть шляпа:
Memo1.lines.add('> '+Received); Ответ: Похоже на то! Спасибо! Изменено!
|
2. Гость
with ClientSocket1.Socket do SendText(Msg); - написал блин можно было просто написать - ClientSocket1.Socket.SendText(Msg);
Ответ: Видемо автор посчитал, что ему так удобнее.
|
1. Гость
Внизу сайта написано, что нельзя копировать статьи. Ага админ сам эту статью спёр, ибо я видел такую же только эта ваще малость переделана!!!
Ответ: Где ты такое вычитал, что нельзя копировать? Видемо плохо читать научили. "Перепечатка материалов разрешается...", главное чтобы автор был.
Я эту статью не писал, мне ее добавили пользователи, я как тебе проверю копипаст это или нет. На автора статьи посмотри! Да и сам подумай как его по другому писать??? Код будет чемто похож |
Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.