Создаем чат для локальной сети в Delphi5

Мне очень часто попадаются подобные статьи, но в них чат состоит из двух приложений: клиента и сервера. А что если совместить это все в одном приложении?

Итак, запускаем delphi, на форму кидаем serversocket и clientsocket. У serversocket есть свойство Portobject 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 появятся два одинаковых сообщения, не пугайтесь это нормально, так как вы отправили сообщение сами себе.
на предыдущую на главную
 
Используются технологии uCoz