Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Нашел код для чата на двоих!

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Нашел код для чата на двоих!
Имя
Сообщение << Старые топики   Новые топики >>
Нашел код для чата на двоих! - 2009-11-06 22:21:37.056666   
OPF_Nik

Сообщений: 49
Оценки: 0
Присоединился: 2009-11-06 12:00:12.700000
Народ нашел код для чата на два компа! Проблема в том что работет через раз, иногда сервер не находит(( не подскажите в чем проблема? вроде бы все правильно..
 
Код программы:
 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;
type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    ClientSocket1: TClientSocket;
    Port: TEdit;
    Name: TEdit;
    Send: TEdit;
    Host: TEdit;
    Memo1: TMemo;
    ServerOn: TButton;
    Client: TButton;
    SendText: TButton;
    ServerOff: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ServerOnClick(Sender: TObject);
    procedure ServerOffClick(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure SendTextClick(Sender: TObject);
    procedure ClientClick(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Port.Text:='454';
// при проверке программы на одном ПК
Host.Text:='127.0.0.1';
// поле Memo и Send просто очистим
Send.Clear;
Memo1.Lines.Clear;
//блокируем клавишу Закрыть сервер
ServerOff.Enabled:= False;
end;
procedure TForm1.ServerOnClick(Sender: TObject);
Begin
// клавишу Client, ServerOn и поля Host, Port надо заблокировать,
// а ServerOff разблокировать соответственно
ServerOn.Enabled:=False;
Client.Enabled:=False;
Host.Enabled:=False;
Port.Enabled:=False;
ServerOff.Enabled:=True;
// запишем указанный порт в ServerSocket
ServerSocket1.Port:=StrToInt(Port.Text);
// создание сервер
ServerSocket1.Active:=True;
// добавим в Memo сообщение с временем создания
Memo1.Lines.Add('['+TimeToStr(Time)+'] Сервер создан ');
end;
procedure TForm1.ServerOffClick(Sender: TObject);
Begin
// клавишу Client, ServerOn и поля Host, Port разблокируем, ServerOff заблокируем
Client.Enabled:=True;
Host.Enabled:=True;
Port.Enabled:=True;
ServerOff.Enabled:=False;
ServerOn.Enabled:=True;
// закрываем сервер
ServerSocket1.Active:=False;
// выводим сообщение в Memo
Memo1.Lines.Add('['+TimeToStr(Time)+'] Сервер закрыт!');
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
// добавим в Memo сообщение с временем подключения пользователя
Memo1.Lines.Add('['+TimeToStr(Time)+'] Подключился пользователь.');
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
// добавим в Memo клиентское сообщение
Memo1.Lines.Add(Socket.ReceiveText());
end;
procedure TForm1.SendTextClick(Sender: TObject);
begin
// проверка, в каком режиме находится программа
If ServerSocket1.Active=True then
// отправляем сообщение с сервера
ServerSocket1.Socket.Connections[0].SendText('['+TimeToStr(Time)+'] '+Name.Text+': '+Send.Text)
else
// отправляем сообщение с клиента
ClientSocket1.Socket.SendText('['+TimeToStr(Time)+'] '+Name.Text+': '+Send.Text);
// отобразим сообщение в Memo
Memo1.Lines.Add('['+TimeToStr(Time)+'] '+Name.Text+': '+Send.Text);
Send.Clear;
end;
procedure TForm1.ClientClick(Sender: TObject);
begin
If Client.Tag=0 then
Begin
// клавишу ServerOn, ServerOff и поля Host, Port заблокируем
ServerOff.Enabled:=False;
ServerOn.Enabled:=False;
Host.Enabled:=False;
Port.Enabled:=False;
// запишем указанный порт в ClientSocket
ClientSocket1.Port:=StrToInt(Port.Text);
// запишем хост и адрес
ClientSocket1.Host:=Host.Text;
ClientSocket1.Address:=Host.Text;
// запускаем клиента
ClientSocket1.Active:=True;
// изменяем тэг
Client.Tag:=1;
// меняем надпись клавиши
Client.Caption:='Отключиться';
end
else
Begin
// клавишу ServerOn и поля Host, Port разблокируем
ServerOn.Enabled:=True;
ServerOff.Enabled:=False;
Host.Enabled:=True;
Port.Enabled:=True;
// закрываем клиента
ClientSocket1.Active:=False;
// выводим сообщение в Memo
Memo1.Lines.Add('['+TimeToStr(Time)+'] Сессия закрыта.');
// возвращаем тэгу исходное значение
Client.Tag:=0;
// возвращаем исходную надпись клавиши
Client.Caption:='Подключиться';
end;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
// добавим в Memo пришедшее сообщение
Memo1.Lines.Add(Socket.ReceiveText());
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
// добавим в Memo сообщение о соединении с сервером
Memo1.Lines.Add('['+TimeToStr(Time)+'] Подключение к серваку.');
end;
 

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
// добавим в Memo сообщение о потере связи
Memo1.Lines.Add('['+TimeToStr(Time)+'] Сервер не был найден.');
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Name.SetFocus;
end;
end.
Post #: 1
RE: Нашел код для чата на двоих! - 2009-11-06 22:42:44.376666   
DzumoHu4

Сообщений: 279
Оценки: 0
Присоединился: 2008-08-04 19:04:43.236666
Код выкладывается в ТЕГЕ list Нечего засорять форум ненужными листингами, попробуй написать своё клиент-серверное приложение.
Post #: 2
RE: Нашел код для чата на двоих! - 2009-11-06 22:50:30   
OPF_Nik

Сообщений: 49
Оценки: 0
Присоединился: 2009-11-06 12:00:12.700000
Извиняюсь, я просто новичок так что не судите) Так что если не тяжело все таки прошу посмотреть)
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Нашел код для чата на двоих!







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.