AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi OnRead bei den Indys...?
Thema durchsuchen
Ansicht
Themen-Optionen

OnRead bei den Indys...?

Ein Thema von keksman · begonnen am 5. Aug 2007 · letzter Beitrag vom 5. Aug 2007
Antwort Antwort
keksman
(Gast)

n/a Beiträge
 
#1

OnRead bei den Indys...?

  Alt 5. Aug 2007, 00:04
Hallo,

habe gerade für die Experten ein sicherlich leichtes Problem, habe mich bisher kaum mit den Indys auseinandergesetzt. Und zwar möchte ich beim TCP Clienten mitbekommen, ob der TCP Server mir was gesendet hat und umgekehrt. Bei den Sockets gibts da ja OnRead (oder ähnlich...) wie bekomme ich das nun bei den Indys mit?

Verwende Indy9

Gruß
keksman
  Mit Zitat antworten Zitat
Benutzerbild von PigfaceJoe
PigfaceJoe

Registriert seit: 17. Dez 2006
Ort: Saarland
24 Beiträge
 
Delphi 7 Personal
 
#2

Re: OnRead bei den Indys...?

  Alt 5. Aug 2007, 01:18
Hi!
Obwohl du das mit der Suche auf jeden Fall gefunden hättest erklär ichs hier mal:

Also, du hast 2 Anwendungen einen Server (IdTCPServer) und einen Client(IdTCPClient).

der Server:

1)Neue Anwendung erstellen
2) idTCPServer1 aufs Formular ziehen
3) Button1 mit Caption "Los gehts " aufs Formular
3) Button2 mit Caption "Und tschüss" aufs Formular

OnClick Ereignis vom Button1:
Delphi-Quellcode:
idTCPServer1.Active:=true;
idTCPServer1.DefaultPort:=80 //irgendeiner, der frei ist...
OnClick Ereignis vom Button2:
idTCPServer1.Active:=false; Nun klickst du den IdTCPserver1 an und wählst unter "ereignisse" das OnExecute ereignis. (das wird aufgerufen, sobald ein Client den Server anwählt)

Hier steht dann folgendes:
Delphi-Quellcode:
  with AThread.Connection do
  begin
showmessage(ReadLN);
Disconnect;
end;
Alles speichern und weiter gehts

So nun der Client:
Also :
Neue Anwendung
Button1 mit Caption" Senden" aufs Formular
edit1 aufs Formular
IdTCPClient1 aufs Formular.
So, folgendes steht im OnClick vom Button1:
Delphi-Quellcode:
IdTcpClient1.host:=localhost;
IdTcpClient1.Port:=80 ;//der gleiche wie beim server..
IdTCPClient1.Connect;
IdTCPClient1.WriteLn(edit1.text);
IdTCPClient1.Disconnect;
So auch das jetzt speichern und server starten. Dann den Client starten.
Denk dran auf den Button1 vom server zu klicken und schon kanns losgehn!

Ich hoffe ich konnte dir helfen,
Schönen Gruss
PigfaceJoe
Max
Glühlampen brennen heller, wenn man sie vor dem Einschrauben aus der Verpackung nimmt.
  Mit Zitat antworten Zitat
keksman
(Gast)

n/a Beiträge
 
#3

Re: OnRead bei den Indys...?

  Alt 5. Aug 2007, 03:06
Naja es muss ständig abgefragt werden, ob etwas neues empfangen wurde, wie z.B. bei einem Spiel oder Chat.
Ich hab mir die Indy Demos angeschaut, aber da wurde mit Timern gearbeitet, dass kann's ja wohl nicht sein

Die Sockets kann man ebenfalls vergessen, die Dinger schaffen es einfach nicht die Daten zu verarbeiten wenn mal ein bisschen mehr gesendet wird.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: OnRead bei den Indys...?

  Alt 5. Aug 2007, 09:17
Die Sockets können das, du musst nur drauf achten, dass OnRead immer wenn etwas ankommt aufgerufen wird und eventuell deine nachricht noch garnicht da ist, du könntest zB nach jedem String ein Byte senden, das anzeigt, dass die nachricht zu Ende ist. Die Sockets lösen das mit dem OnRead IMHO mit einem Thread der ständig abfragt ob etwas ankommt, also praktisch auch etwas wie ein "timer"

Benutz einfach mal die Suche, es hatten schon einige weitere Leute das gleiche Problem.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
keksman
(Gast)

n/a Beiträge
 
#5

Re: OnRead bei den Indys...?

  Alt 5. Aug 2007, 14:06
Die Sockets sind absoluter Müll, selbst Borland rät von diesen ab. Sende ich alle 10 Sekunden was funktioniert es wunderbar, lass ich den jetzt 10x die Sekunde was senden, passiert irgendwann einfach nichts mehr.

Delphi-Quellcode:
  
TChat = record
  Nick: String[12];
  Text: String[255];
end;
Delphi-Quellcode:
  
if Socket.ReceiveLength = SizeOf(Chat) then
begin
  Socket.ReceiveBuf(Chat, SizeOf(Chat));
  Memo1.Lines.Add(
  Chat.Nick + ' sagt: ' +
  Chat.Text
  );
end;
So empfange ich z.B. Daten. Das währe in den Sockets jetzt bei OnRead drin. Sende ich aber jetzt Daten per Timer also z.B. 10x die Sekunde, passiert irgendwann nichts mehr. Ich bin gerade (testweise) dabei einem Singleplayer Spiel einen Multiplayer zu verpassen. Charaktere spawnen und vom Server bewegen lassen klappt wunderbar, nur laggt das irgendwann wenn nur alle 10 Sekunden die Position der Charaktere abgefragt wird. Daher müsste ich die Positionen immer abfragen... die Sockets kann man da vergessen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz