На самом деле, чат очень легко написать, но с помощю компонентов tserversocket и tclientsocket. Хотя, чтобы оградить вас от ошибок при создании чата, рекомендую сразу скачать рабочий исходник тут
Приступим.
Для работы этого кода, на форме должно лежать:
tlistbox-1шт.с именем mes tbutton-4шт. с именами button1,button2,button3 и button4 tedit-4шт. c именами edit1,edit2,edit3 и edit4 tserversocket-1шт.с именем server tclientsocket-1шт.с именем client
unit unit1;
interface
uses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs,wininet, stdctrls, scktcomp, psock, nmstrm;
type tform1 = class(tform) button1: tbutton; button2: tbutton; edit1: tedit; client: tclientsocket; server: tserversocket; button3: tbutton; edit2: tedit; label1: tlabel; edit3: tedit; label2: tlabel; edit4: tedit; label3: tlabel; mes: tlistbox; button4: tbutton; procedure button1click(sender: tobject); procedure button2click(sender: tobject); procedure serverclientread(sender: tobject; socket: tcustomwinsocket); procedure button3click(sender: tobject); procedure button4click(sender: tobject); private { private declarations } public { public declarations } end;
var form1: tform1; a:integer; implementation
{$r *.dfm}
procedure tform1.button3click(sender: tobject);{Код для кнопки активации сервера} begin server.port:=strtoint(edit2.text);{Порт для прослушивания} server.active:=true;{Активация прослушивания порта} end;
procedure tform1.button1click(sender: tobject);{Код для кнопки коннекта} begin client.port:=strtoint(edit2.text);{Порт для подключения} client.address:=edit3.text;{ip-адрес} client.host:=edit4.text;{Имя Компа} client.active:=true;{Подключение} a:=0; showmessage('Ура! Подключились!'); end;
procedure tform1.button2click(sender: tobject);{Код для кнопки отправки сообщения} begin client.socket.sendtext(edit1.text);{Отправка} mes.items.strings[a]:=edit1.text;{Пишем этот текст у себя} a:=a+1; edit1.text:=''; end;
procedure tform1.serverclientread(sender: tobject; socket: tcustomwinsocket);{Эта функция вызывается при получении сообщения} begin mes.items.strings[a]:='> '+socket.receivetext;{Записываем} a:=a+1; end;
procedure tform1.button4click(sender: tobject);{Код кнопки очистки ЛистБокса} begin mes.items.clear; a:=0; end;
end.
Надеюсь, этот простенький пример поможет вам в дальнейшем при создании приложений клиент/сервер
|