Autor Beitrag
FrEaKY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Mo 15.11.04 19:53 
Hi Leudde !
Ich krieg den Indy chat einfac net hin :(
Kann mir vielleicht jemand schnell einen einfachen funktionierenden IndyTCP Chat proggn?! BITTE!! er funzt einfach net bei mir :( :evil: !!
MFG Freaky
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Do 18.11.04 13:24 
Hallo!

Schau mal unter Suche in: Delphi-Forum, Delphi-Library SIMPLENETWORK nach.

Cu,
Udontknow
FrEaKY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Fr 19.11.04 20:08 
Hmm ja nur ist das mit SimpleTCP.. damit kann ichs ja und ich wollte auch keine aderen Komponenten dafür benutzen sondern nur mit den standard Indys.
MFg Freaky
Benutzername
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 210

Win XP Pro
Delphi 7 PE, D2005 Prof. SSL
BeitragVerfasst: Fr 19.11.04 20:32 
Und was spricht dagegen, die SimpleTCP-Kompos zu benutzen?
Ich verwenden sie auch, weil mir die Indys zu umfangreich und so sind.
FrEaKY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Fr 19.11.04 23:23 
ich will halt alles selber proggn was in meinen Progies drinne is und net einfach alles faul einfügen.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.11.04 00:14 
Das kannst du dir eh abschminken. Schon indem du die VCL benutzt, greifst du auf einen riesigen Vorrat von fertigen Problemkapselungen zu. Ob es ein Button, ein Edit oder ein Memo ist: alles ist eine Zusammenfassung vieler Teilprobleme. Es gehört einfach zum modernen Programmieren dazu, Kapselungen anderer Programmierer zu übernehemen und davon zu profitieren. Hauptsächlich aus dem Grund der Wiederverwendbarkeit wurde OOP erfunden.
FrEaKY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Sa 20.11.04 19:46 
löl. Egal. Ein Chat mit IndyTCP wird ja wohl net so schwer sein das man dazu ne Kompo benutzen muss.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.11.04 20:38 
FrEaKY hat folgendes geschrieben:

Kann mir vielleicht jemand schnell einen einfachen funktionierenden IndyTCP Chat proggn?! BITTE!!

FrEaKY hat folgendes geschrieben:

Ein Chat mit IndyTCP wird ja wohl net so schwer sein

Eben deswegen kannst du ja mal selbst versuchen, die Demo für nen TCP Chat, die du von der Indy-Page bekommst, zu verstehen.
FrEaKY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Sa 20.11.04 22:07 
Die hab ich auch verstande aber ist da beim Client ein simpler Timer der abfragt ob irgentwas eingekommen ist und kein Thread.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 21.11.04 10:37 
Du hast selbst gesagt, du möchtest einen einfachen (=simplen) TCP-Chat. Und wo siehst du die Vorteile eines solchen Threads gegenüber eines Timers?
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: So 21.11.04 10:42 
FrEaKY hat folgendes geschrieben:

Kann mir vielleicht jemand schnell einen einfachen funktionierenden IndyTCP Chat proggn?! BITTE!!


FrEaKY hat folgendes geschrieben:

[...]ich will halt alles selber proggn was in meinen Progies drinne is [...]


Was denn nun? :gruebel:


Alstar
recall
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 449



BeitragVerfasst: So 21.11.04 10:59 
Also:

Was ist daran so schwer ?

Der TCP-Server bekommt die Nachrichten im OnExecute, die die Clients ihm schicken.
Auslesen der Nachrichten:
AThread.Connection.ReadLn()du kannst aber auch nur einzelne Chars, o.a. auslesen.

Zurücksenden einer Nachricht (Server -> Client)AThread.Connection.SendCmd()
Client-Nachricht an Server senden:
ausblenden Delphi-Quelltext
1:
IdTCPClient1.WriteLn()					

danach auf eine Rückantwort warten (ACHTUNG ! Es muss auch eine kommen,
sonst wartet der Client solange bis TimeOut ist.):IdTCPClient1.ReadLn()

Damit müsstest du es schaffen :)

Viele Grüsse.
hardy1234
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Windows XP pro/ SuSe LINUX 9.2
Delphi7 enterprise/ Kylix3 prof
BeitragVerfasst: Di 30.11.04 16:39 
FrEaKY hat folgendes geschrieben:
Hi Leudde !
Ich krieg den Indy chat einfac net hin :(
Kann mir vielleicht jemand schnell einen einfachen funktionierenden IndyTCP Chat proggn?! BITTE!! er funzt einfach net bei mir :( :evil: !!
MFG Freaky


Das kannst Du aber auch mit den normalen TCP-Komponenten von Delphi machen. Ich sitz auch gerade an sowas und möchte das möglichst Ereignisorientiert haben, also ohne Timer. Das ist auch möglich, wie sich inzwischen rausgestellt hat. Allerdings mußt du dann ein eigenes Protokoll aufbauen. Das ist letzlich nichts anderes als das Auswerten von erhaltenen Befehlen und das Empfangen oder Senden von Daten.

Die Indy's kapseln in diesem Zusammenhang leider etwas zuviel, was mir arg mißfällt. Mal davon abgesehen, das sie ziemlich mäßig dokumentiert sind.

Der Schlüssel ist TTcpServer.OnAccept, dieser Event wird immer dann erzeugt wenn ein Client versucht zu verbinden oder Daten zu senden. Um einen simplen ClientThread kommst du allerdings nicht herum, das haben die Indy's nur gekapselt.

Meiner sieht etwa so aus und reicht zum Testen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
type

  TMsgHeader = record
    CltKey    : string;
    SenderNick: string[40];
    Command   : word;
  end;

  TSimpleClient = class(TObject)
    RemoteNick  : string[40];
    RemoteHost  : string[32];
    LinkId      : integer;
  end;
.
.
.
procedure TChatClient.DoAccept(Sender: TObject; Clt: TCustomIpClient);
var
  Client: TSimpleClient;
  H     : TMsgHeader;
begin
  Clt.ReceiveBuf(H, SizeOf(H));
  Client:= LookForClient(H.RemoteNick);
  if (Client = nil) then begin
    if CheckCltKey(H.CltKey) then begin
      { neuen thread anlegen }
      Client:= TSimpleClient.Crate;
      Client.RemoteNick:= H.SenderNick;
      Client.LinkId:= FClients.Count;
      FClients.Add(Client);
    end
    else begin
      { hier können die strafmaßnahmen für eine unerlaubte verbindung rein }
    end;
  end
  else begin
    { existierender client sendet }
    { hier beginnt Dein Protokoll }
    case H.Command of
    .
    .
    .
    end; // of case
  end;
end;


Viel Spaß beim Ausprogrammieren.

Moderiert von user profile iconUdontknow: Delphi-Tags hinzugefügt.