Autor Beitrag
Chris1308
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 220

Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
BeitragVerfasst: Di 06.05.03 18:23 
Hi,
ich versuche derzeit mit einem Kollegen einen Instant Messenger zu programmieren.
Derzeit stehen wir aber noch an den anfänglichen Problem. Da wir unterschiedliche Versionen haben, haben wir uns entschlossen die Indy-Komponenten zu verwenden. Nun versuche ich erstmal ein einfaches Senden und Empfangen zu programmieren. Allerdings krepiere ich dabei fast.

Also: ich habe auf meinem Formular ein IdTCPClient und ein IdTCPServer. Ich habe auch zwei Edits (Server, Message) und ein "Chatlog". Nun will ich an den, im Server-Edit eingegebenen, Server einen einfachen String senden (nichts weiter), der Server soll nun prüfen, was dieser String enthält und ihn nach einer Prüfung auf ein Kommando im Memo-Chatlog ausgeben.

Das Prüfen usw. kommt später. Jetzt will ich erstmal senden und empfangen. Wie geht das!? Also senden irgendwie mit IdTCPClient.write('Something'); Aber kann mir das irgendwer ziemlichg kurz, aber eindeutig erklären oder einen Link nennen.

Indy-Version: 9.0.11

Bin für jede Antwort offen!
Chris

PS: Wie einfach sind doch TServerSocket und TClientSocket... ;) Ich weiß, Borland empfiehlt Indy... Aber geht halt nicht anders... :cry:
ase
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Mi 07.05.03 14:54 
servus

nimm indy... vertrau mir... :lol:


also du mast folgendes:

(pseudocode)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
CLIENT::
Procedure SendBtnClick(Sender: TObject);
Begin
  - Die Verbindungsdaten der Client-Componente setzen (Host, Port)

  - Zum Server mittels der Connect Methode verbinden.

  - Daten zum Server senden.

  - Verbindung trennen.
End;

SERVER::
Procedure IdServerExcecute(Sender: TObject; AThread: TIdPeerThread);
Begin
  - Diese Prozedur muss solange laufen, wie der Client connected ist. Top:
       While AThread.Connected do Begin ::Code:: End;

  - Lese die Daten vom Client mittles AThread.Connection.Read[Ln]
  
   - Die Daten in irgend einer Form ausgeben. Auf Thread-Safety code
     achten!
End;


des wars schon. du solltest bei deiner server komponente noch das ganze interface zeugs und so setzen. also die ip adressen festlegen auf die er hören soll. meist: localhost (127.0.0.1) und die globale ip adresse von deinem rechner falls vorhanden. zeugt indy ja alles an.

Wenn du son messager proggen willst, dann würde ich empfehlen eigene komponenten zu entwickeln die von TIdTCPClient und TIdTCPServer abstammen. somit wahrst du ordnung in deiner main form, glaub mir :!:

und für deinen client ist es besser nich bei jeder nachricht neu zu connecten. mach nen connect button, wo du connectest und was zum trennen.


ase
Chris1308 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 220

Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
BeitragVerfasst: Mi 07.05.03 15:05 
Hi ase,
also habe gerade herausbekommen, dass im OnExecute ein einfaches AThread.Connection.ReadLn reichen sollte. Trotzdem danke... Ich werde ja sehen, ob's klappt... ;)

Chris
ase
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Mi 07.05.03 15:11 
servus

reicht auch aber danach wird vom indy server die verbindung beendet. auf server seiten ist die verbindung nur so lange aktiv wie die der handler OnExecute ausgeführt wird.