Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2010, 16:43
Norfonzor Norfonzor вне форума
Прохожий
 
Регистрация: 04.10.2010
Сообщения: 4
Репутация: 10
По умолчанию Дайте рабочий Indy

перелопатил интернет, но не смог найти рабочую Indy. Не могу даже сделать элементарный пример работы по UDP:

на форме
IdUDPServer1
и
IdUDPClient1

от клиента:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPClient1.Host := editHost.Text; (берет инфу с edit)
IdUDPClient1.Send(Edit1.Text);      (берет инфу с edit)
end;

на сервере идет прием по UDPRead

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  LMsg: string;
begin
  if AData.Size = 0 then
  begin
   Label4.Caption:=inttostr(random(2));
  end 
  else
  begin
    SetLength(LMsg, AData.Size);
    AData.ReadBuffer(LMsg[1], Length(LMsg));
    Label3.Caption:=LMsg;
  end;
end;
Admin: Пользуемся тегами!

делаю это в делфи, выбираю на сервере onUDPRead мне пишет:


ПОМОГИТЕ ЧЕМ СМОЖЕТЕ!!!

Последний раз редактировалось Admin, 14.10.2010 в 17:03.
Ответить с цитированием
  #2  
Старый 14.10.2010, 17:01
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

http://www.indyproject.org/
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 15.10.2010, 08:06
Norfonzor Norfonzor вне форума
Прохожий
 
Регистрация: 04.10.2010
Сообщения: 4
Репутация: 10
По умолчанию

Скачивал я от туда Indy, не работает!!!
Ответить с цитированием
  #4  
Старый 15.10.2010, 12:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

да все работает: http://data.cod.ru/71439
http://data.cod.ru/71441
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 15.10.2010 в 12:35.
Ответить с цитированием
  #5  
Старый 15.10.2010, 13:12
Norfonzor Norfonzor вне форума
Прохожий
 
Регистрация: 04.10.2010
Сообщения: 4
Репутация: 10
По умолчанию

Разобрался в чем тут дело, в indy9 и indy10 ф-ии и процедуры отличаются, тобишь в indy10 в ф-ии IdTCPServer1Execute вместо Adata - AContext, с др возможностями.

Собрал проект Server- client для передачи текста по сети, используя TCP

при попытке отключения клиента и сервера (по запросу от клиента) появляется сообщение от сервера:
"Ошибка получения сообщения "Connection closed gracefully"


файл на проект:
http://webfile.ru/4817210

фото Form http://pixs.ru/showimage/scrnJPG_6524918_1074062.jpg

код:
Код:
unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
 IdMessage, ComCtrls, ToolWin, ActnMan, ActnCtrls, ActnMenus, ExtCtrls,
 ActnList, IdException, IdGlobal, IdContext,
 IdCustomTCPServer, IdTCPServer;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Label2: TLabel;
    Label5: TLabel;
    Button1: TButton;
    Button2: TButton;
    IdTCPClient1: TIdTCPClient;
    Label8: TLabel;
    Edit2: TEdit;
    Button3: TButton;
    RichEdit1: TRichEdit;
    Label9: TLabel;
    RichEdit3: TRichEdit;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    TimerOFFserver: TTimer;
    Button4: TButton;
    RichEdit2: TEdit;
    Label6: TLabel;
    Button5: TButton;
    Label7: TLabel;
    procedure IdTCPServer1Execute(AContext: TIdContext);

    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure TimerOFFserverTimer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure IdTCPClient1Disconnected(Sender: TObject);
    procedure IdTCPClient1Connected(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var l: string;
begin
try
//l := TrimRight(AContext.Connection.IOHandler.ReadLn(enUTF8));
l:=AContext.Connection.Socket.ReadLn(enUTF8);
if l='exit' then
begin

//AContext.Connection.Socket.WriteLn('exit_ok');
AContext.Connection.IOHandler.WriteLn('exit_ok');
Label6.Caption:='Off через 5 сек';
TimerOFFserver.Enabled:=true;

end else
AContext.Connection.Socket.WriteLn('Получил пакет');
//AContext.Connection.Disconnect;

RichEdit3.Lines.Append(l);
except
//Обработка ошибок получения сообщения
on E: EIdException do
begin
ShowMessage('Ошибка получения сообщения: ' + E.Message);
end;
on E: Exception do
begin
ShowMessage('Ошибка VCL: ' + E.Message);
end;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
try
IdTCPServer1.Active := not IdTCPServer1.Active;
if IdTCPServer1.Active
then
begin
label3.Caption := 'Статус: Активен';
Label6.Caption:='';
end
else label3.Caption := 'Статус: Не активен';
except
on E: EIdException do
begin
ShowMessage('Ошибка активации: ' + E.Message);
end;
on E: Exception do
begin
ShowMessage('Ошибка VCL: ' + E.Message);
end;
end;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Client
IdTCPClient1.Disconnect;
Action := caFree;

//сервер

try
IdTCPServer1.Active := False;
label3.Caption := 'Статус: Не активен';
Action := caFree;
except
end;

end;



procedure TForm1.Button2Click(Sender: TObject);
begin
with IdTCPClient1 do
if (Connected)
then
try
//IOHandler.WriteLn(RichEdit2.Text, enUTF8);
Socket.WriteLn(RichEdit2.Text, enUTF8);

RichEdit1.Lines.Append(RichEdit2.Text);
except
//Обработка ошибок передачи сообщения
on E: EIdException do
begin
ShowMessage('Ошибка передачи сообщения' + E.Message);
end;
on E: Exception do
begin
ShowMessage('Ошибка VCL' + E.Message);
end;
end
else
ShowMessage('Необходимо подключиться к серверу');
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
IdTCPClient1.Host:=Edit2.Text;
with IdTCPClient1 do
if (Connected)
then
try
Disconnect;
except
on E: Exception do
begin
ShowMessage('Ошибка VCL: ' + E.Message);
end;
end
else
try
Connect;
except
//Обработка ошибок подключения
on E: EIdException do
begin
ShowMessage('Ошибка подключения: ' + E.Message);
end;
on E: Exception do
begin
ShowMessage('Ошибка VCL: ' + E.Message);
end;
end;
end;


procedure GetNewMessages;
var l:string;
begin
l:='';
l:=form1.IdTCPClient1.Socket.ReadLn(enUTF8);
if l='exit_ok' then form1.IdTCPClient1.Disconnect else
if l<>'' then showmessage('Я знаю что сервер получил пакет');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
   s:string;
begin
 Timer1.Interval:=1000;
 if IdTCPClient1.Connected then
 begin
  i:=IdTCPClient1.Socket.InputBuffer.Size;
  if i>0 then GetNewMessages;
 end;
end;

procedure TForm1.TimerOFFserverTimer(Sender: TObject);
begin
IdTCPServer1.Active:=false;
label3.Caption := 'Статус: Не активен';
TimerOFFserver.Enabled:=false;
Label6.Caption:='';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
with IdTCPClient1 do
if (Connected)
then
try
Socket.WriteLn('exit', enUTF8);
except
//Обработка ошибок передачи сообщения
on E: EIdException do
begin
ShowMessage('Ошибка передачи сообщения' + E.Message);
end;
on E: Exception do
begin
ShowMessage('Ошибка VCL' + E.Message);
end;

end;
end;

//клиент
procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);
begin
label4.Caption := 'Статус: Не активен';
end;

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
label4.Caption := 'Статус: Подключен';
end;


procedure TForm1.Button5Click(Sender: TObject);
begin
RichEdit2.Text:=inttostr(random(100));
end;

end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter