И я себе обещал, как изучу так выложу полную информацию по этой теме. Я делал свой чат на сокетах. По ним можно общаться, как по сети интернет, так и по локальной сети. Для этого вам достаточно знать Ip адрес. Программировал на Delphi7.
Так как я делал на delphi7, там не было по умолчанию тех компонентов, которые мне нужны. (ServerSocket1, ClientSocket1).
Для этого нужно добавить компоненты Сокета.
В меню заходим Component --> Install Packages…--> Add --> dclsockets70.bpl
И указываем путь к пакету с компонентами, он находиться в корневом папке Delphi в паке Bin. У меня он находился в:
C:\Program Files\Borland\Delphi7\Bin\ dclsockets70.bpl
После такого добавления у вас в вкладке Internet должны появиться данные компоненты.
На форму я кинул такие элементы: ServerSocket1, ClientSocket1, Edit1 (для чата), Edit2 (для IP адреса сервера), Memo1 для отображения сообщения, ну и 3 кнопки.
Для создания Сервера пишем на событие в кнопке вот такую вещь:
function GetLocalIP: String;
const WSVer = $101;
var
wsaData: TWSAData;
P: PHostEnt;
Buf: array [0..127] of Char;
begin
Result := '';
if WSAStartup(WSVer, wsaData) = 0 then begin
if GetHostName(@Buf, 128) = 0 then begin
P := GetHostByName(@Buf);
if P <> nil then
Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ServerSocket1.Port:=65000; // Порт вашего сервера, задаем любой какой вам понравиться
ServerSocket1.Active:=True; // активируем сервер
ServerSocket1.Open; //запускаем
ShowMessage('Ваш IP: '+GetLocalIP); //выдаем наш IP адрес, чтоб клиент смог к нам подключиться
end;
После того как сервер был включен, клиент сможет подключиться к серверу.
Для этого он прописывает IP адрес сервера в Edit2, И нажимает кнопку соединиться:
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Address:=Edit2.Text; // IP адрес сервера
ClientSocket1.Port:=65000; //его порт
ClientSocket1.Active:=True; //активируем клиента
ClientSocket1.Open; //запускаем
end;
Внимание: Клиент может только отправлять сообщение, а Сервер в свою очередь – принимать. Для двустороннего общения включите Клиента и Сервера на двух программах разного конца сети.
Для чтения сообщения, у сервера есть ожидание приема сообщения…вот она
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.add(Socket.RemoteAddress+': ');
memo1.Lines.add(Socket.ReceiveText);
StatusBar1.Panels.Items[0].Text:=Socket.RemoteAddress;
end;
Для отправки сообщения я написал в двух процедурах. Вот они:
procedure TForm1.SendMes(Text: String);
begin
if form1.ServerSocket1.Active then
if form1.ServerSocket1.Socket.ActiveConnections>0 then
form1.ServerSocket1.Socket.Connections[0].SendText(Text);
if form1.ClientSocket1.Active then
form1.ClientSocket1.Socket.SendText(Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMes(Edit1.Text);
memo1.Lines.add(GetLocalIP+': ');
memo1.Lines.add(Edit1.Text);
end;
Вот и всё! Примитивный Чат у вас готов. Далее ваша фантазия и умелые руки.
Удачи!
Статьи по теме: Создание простейшего чата
Просмотров: 28873
4. Тупупау
Забыли процедурку для получения сообщений у клиента.
procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.add(Socket.ReceiveText()); end; |
1. гг
Луди!Не пашет...проблема вот в чем-- " wsaData: TWSAData; " выделяет красным и незапускается!!!ПОМОГИТЕ ПЛЗ!!
|
Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.