Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2012, 16:54   #1
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию indy....

Ребят, теперь у меня трабла с инди)
Вообщем, подключение есть. Но не отправляет текст
коды :
Сервер :
Код:
  type
  PClient = ^TClient;
  TClient = record
  DNS : String[20];
  Thread : Pointer;
  end;

var
  Form1: TForm1;
  Clients : TThreadList;
  Temp: TStringList;
  ActClient                       : PClient;
  Command,
  TempStr                         :TStringList;
  NewClient                       : PClient;
procedure TForm1.FormCreate(Sender: TObject);
begin
Clients := TThreadList.Create;    
IdTCPServer1.Active := True;     
Label7.Font.Color:=clGreen;
Label7.Caption:='Включен';
Temp:=TStringList.Create();     
                                 end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Temp.Free; 
IdTCPServer1.Active:=false;
end;
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
    GetMem(NewClient, SizeOf(TClient)); 
    NewClient.DNS := AThread.Connection.LocalName; 
    NewClient.Thread :=AThread; 
    AThread.Data:=TObject(NewClient);
    try
    Clients.LockList.Add(NewClient);                                   
    memo1.Lines.Add('['+TimeToStr(Time)+']  есть подключение.');
    ListBox1.AddItem(NewClient.DNS,nil);
    finally
      Clients.UnlockList;
    end;
  end;
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
  ActClient := PClient(AThread.Data);
    try
  Clients.LockList.Remove(ActClient);                                     
    finally
  Clients.UnlockList;
  end;
    FreeMem(ActClient);
    AThread.Data := nil;
  end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
if not AThread.Terminated and AThread.Connection.Connected then
  begin
    Command:=TStringList.Create;
    TempStr:= TStringList.Create;
    AThread.Connection.ReadStrings(Command);
    ActClient := PClient(AThread.Data);
    Memo1.Lines.Add(Command.Text);
  try
if (Command.Strings[0]='new') and (Command.Count=2) then
begin
  Temp.Clear;
  Temp.add(ActClient.DNS);
  Temp.add(Command.Strings[1]);
    TempStr.add('new');
    TempStr.add('ok');
  AThread.Connection.WriteStrings(TempStr,true);
end;
if (Command.Strings[0]='get') and (Command.Count=1) then
begin
  AThread.Connection.WriteStrings(Temp,true);
  end;
    Except
    Command.Free;
    TempStr.Free;
      end;
         end;

if (Command.Strings[0]='loginpassword') then
begin
        ShowMessage('DAAAAAAAAAAAAAAAAAAAAA');
end;

      end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.clear;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
IdTCPServer1.Active:=true;
Label7.Font.Color:=clGreen;
Label7.Caption:='Включен';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
IdTCPServer1.Active:=false;
Label7.Font.Color:=clRed;
Label7.Caption:='Выключен';
end;
end.
Клиент :
Код:
var
  Form1: TForm1;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
IdTCPClient1.Connect(); 
except
showmessage('Сервер не доступен.'+#13+'Возможно, что у вас не соединения с интернетом'+#13+'Либо сервер не доступен для подключения'); 
end;
end;  
procedure TForm1.Button2Click(Sender: TObject);
begin
IdTCPClient1.Write(edit1.Text+edit2.text);
end;
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
  var Temp:TStringList;
  Begin
    Temp:=TStringList.Create();
    while IdTCPClient1.Connected do
  begin
    IdTCPClient1.ReadStrings(Temp); 
      memo2.Lines.AddStrings(Temp);
        Temp.Clear;
      end;
  end;
procedure TForm1.Button3Click(Sender: TObject);
begin
IdTCPClient1.Disconnect;
end;
end.
Братишка^_^ вне форума Ответить с цитированием
Старый 11.04.2012, 16:55   #2
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Код урезан! Из-за ограничения
Помогите пожалуйста ,почему не приходят сообщения от клиента?
Братишка^_^ вне форума Ответить с цитированием
Старый 11.04.2012, 19:39   #3
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Чем тебе мой код не по нраву?
тут ты нафигачил не лучше чем прошлый раз...
1. Отучайся от глобальных переменных! тем более в многопоточных приложениях
2. Нафега ты плодишь сущности в виде NewClient а тем более их список Clients? вся инфа доступна и без нее
3. ты хоть протокол опиши что за ню и гет

ты мой код вообще смотрел? сравни никаких списков и одна глобальная переменная Form1
косяк в моем сервере - это отдача сообщений по запросу, а не сразу, и однострочные месаги...
но т.к. написано для обучательных целей простительно.
тебе может клиента к моему серверу накатать?


у тебя клиент зависает в IdTCPClient1Connected ты его из цикла сафсем не выпускаешь
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 11.04.2012 в 19:58.
Slym вне форума Ответить с цитированием
Старый 11.04.2012, 23:15   #4
Братишка^_^
Пользователь
 
Регистрация: 07.04.2012
Сообщений: 35
По умолчанию

Я твой код толком понять не смог)
Братишка^_^ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
У меня borland developer studio delphi 2006 так вот как вставить на вкладку tool palette компоненты Indy Clients и Indy Misc Artem_host Общие вопросы Delphi 0 01.02.2012 09:55
Indy trad Общие вопросы C/C++ 2 12.01.2011 10:49
как обновить indy 9 на indy 10 Пилигрим Компоненты Delphi 16 30.04.2010 10:11
indy Рамик Компоненты Delphi 10 21.08.2009 18:04
Indy 9 против Indy 10 OrdJONY Свободное общение 2 08.11.2008 20:28