Создаем чат для локальной сети в Delphi5
Мне очень часто попадаются подобные статьи, но в них чат состоит из двух
приложений: клиента и сервера. А что если совместить это все в одном
приложении?
Итак, запускаем delphi, на форму кидаем serversocket и
clientsocket. У serversocket есть свойство Port
(в object inspector), здесь вводим номер порта (желательно больше
1024, например 6789). В clientsocket тоже самое
свойство, и пишем тот же порт.
Далее на форму кидаем 3 поля ввода (edit), 1 кнопку (button),
и memo (это для вывода сообщений). Еще надо добавить 2 метки
(label), это для того чтобы подписать поля ввода.
Теперь размещаем это все по своему усмотрению (или как на рисунке):
Теперь приступим к написанию кода. Два раза кликаем на кнопке button1,
у нас появится процедура:
procedure TForm1.Button1Click(Sender: TObject);
end;
Пока что пустая, в ней пишем:
var
sendtext:string;
error:boolean;
begin
clientsocket1.active:=false; {отключаем сокет, чтобы можно было изменить ip-адрес}
clientsocket1.host:=edit3.text; {здесь храниться ip-адрес собеседника}
error:=false;
try
clientsocket1.open; {снова открываем сокет}
except
error:=true;
end;
if error=true then showmessage('Ошибка соединения')
else
begin
sendtext:=edit2.text+': '+edit1.text;
memo1.lines.add(sendtext); {добавляем в memo введенный текст}
ClientSocket1.Socket.SendText(sendtext); {посылаем текст серверу (ник и сообщение)}
edit1.text:=''; {очищаем поле ввода для ввода нового сообщения}
end;
end;
Теперь чтобы не нажимать постоянно кнопку, сделаем так, чтобы можно было
отправлять сообщения прямо из edit (при нажатии enter).
Кликаем мышкой на edit1. В object inspector нажимаем
вкладку events, и видим событие OnKeyPress. Кликаем на
него два раза, у нас появится тело процедуры, в нем пишем:
case key of
chr(13):button1.click();
end;
Итак теперь мы можем отправлять сообщения, и сейчас напишем процедуру
для принятия этих сообщений. Жмем на serversocket, потом также
во вкладке events жмем два раза на событие OnClientRead.
В теле появившейся процедуры пишем:
var
rectext:string;
begin
application.restore;
rectext:=socket.receivetext;
memo1.lines.add(rectext);
end;
Вот вроде бы и все. Теперь можно скомпилировать наш проект, и запустить.
Чтобы проверить работу чата, в поле для ввода ip-адреса можно
ввести свой ip-адрес или localhost. И отправить сообщение.
В memo появятся два одинаковых сообщения, не пугайтесь это нормально,
так как вы отправили сообщение сами себе.
|
|