Problem z połączeniem TCP/IP

0

Witam.
Napisałem prosty program będący jednocześnie klientem i serwerem. Służy on do połaczenia TCP/IP. Na formie mam
1xlabel, 1xbutton, 1xgroupbox, 1xmemo, 1xedit1, TidTCPClient i TidTCPServer.

Źródło wygląda tak:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdCustomTCPServer, IdTCPServer, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdIOHandler, IdIOHandlerSocket;

type
  TForm1 = class(TForm)
    Client: TIdTCPClient;
    Server: TIdTCPServer;
    Edit1: TEdit;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    Button1: TButton;
    procedure ClientConnected(Sender: TObject);
    procedure ClientDisconnected(Sender: TObject);
    procedure ServerConnect(AContext: TIdContext);
    procedure ServerDisconnect(AContext: TIdContext);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClientConnected(Sender: TObject);
begin
Memo1.Lines.Add('Connected');
end;

procedure TForm1.ClientDisconnected(Sender: TObject);
begin
Memo1.Lines.Add('Disconnected');
end;

procedure TForm1.ServerConnect(AContext: TIdContext);
begin
Memo1.Lines.Add('Client connected');
end;

procedure TForm1.ServerDisconnect(AContext: TIdContext);
begin
Memo1.Lines.Add('Client disconnected');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Client.Connected then
begin
Client.Disconnect;
Button1.Caption:= 'Connect';
end else
begin
Server.Active:=False;
Client.Host:=Edit1.text;
Client.Connect;
Button1.Caption:='Disconnect';
end;
end;

end.

Było to pisane na podstawie książki "Delphi 7. Ćwiczenia zaawansowane"

Wszystko byłoby ok, gdyby nie fakt, że w linijce

 procedure ServerConnect(AContext: TIdContext);

krzyczy mi o błąd:

[Error] Unit1.pas(21): Undeclared identifier: 'TIdContext'

Podobnie sprawy się mają, gdy napisałem program podobny do poprzedniego tylko na komponentach TidIRC Client i Server. Tylko że wtedy w linijce z poleceniem

procedure IdIRCServer1TIdCommandHandler0Command(ASender: TIdCommand);

wyskakuje mi błąd

[Error] Unit1.pas(28): Undeclared identifier: 'TIdCommand'

O co chodzi? Czy brakuje mi czegoś w sekcji Uses?

Pozdrawiam,

bht

0

a czy do tak banalnej aplikacji nie wystarcza ci sockety z delphi twoj program bedzie zajmowal duzo mniej miejsca.

0

więc tak:
napisałem ten tekst tylko w celu pokazania mojego problemu, który występuje w "troszkę" większej aplikacji, a nie chciałem udostępniać jej źródła ;) . Jakby chodziło o tak banalną aplikację, to na pewno użyłbym socketów ;P
No więc... wie ktoś o co chodzi?

0

Indy nie dodaje wszystkiego co trzeba do uses, kliknij na to czego nie ma, potem F1 - wyskakuje strona o danym typie i z jakiego jest unitu, potem dopisujesz ten unit do uses i gra

BTW Uh, jakie zaawansowane ćwiczenia ... ;P

0

tylko coś ta pomoc w delphi nie bardzo współpracuje z komponentami Indy ;P
co do btw to sie zgadzam :P

0

co ty w ogóle masz za wersje delphi i Indy

0

mam dlph 7 i indy 10

0

w Help -> Customize znajdź i dodaj plik pomocy Indy

co do problemu to TIdCommand jest w unicie IdTCPServer (który masz już w uses) a TIdContext to nieistniejący typ - na pewno takie zdarzenia wygenerował ci delphi ? może przepisałeś z książki nazwę zdarzenia a okazuje się że było robione to na Indy w jakiejś bardzo starej wersji

0

w delphi 7 nie ma indy 10 wiec pomoc ci nic nie da. 10 wyglada inaczej dlatego masz problemy

0
spawacz000 napisał(a)

w delphi 7 nie ma indy 10 wiec pomoc ci nic nie da. 10 wyglada inaczej dlatego masz problemy

W D7 masz takie indy jakie sobie zainstalujesz. A co do pomocy to Adamo podał jak dodać plik pomocy indy do pomocy delphi

0

jak dla mnie to może sobie zainstalować 15, napisalem tylko ze jesli pisal w oparciu o 7 to standardowo nie ma 10. Do przykladu w ksiazce raczej nie instalowali extra 10 zeby pokazac jak polaczyc za pomoca INDY.

0

a nie lepiej będzie sobie samemu obsłużyć sobie gniazdka ? :P mniej grzebania się z modułami, jakimis nie działającymi klasami itp. :P

0

obsługa socketów jest może i prosta, tylko że nie bardzo idzie przez nie połączenie za natem :-/

1 użytkowników online, w tym zalogowanych: 0, gości: 1