Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit Verbindungsaufbau (https://www.delphipraxis.net/57347-problem-mit-verbindungsaufbau.html)

fran 19. Nov 2005 17:28


Problem mit Verbindungsaufbau
 
Hallo ich habe da mal eine Frage.

Und zwar habe ich in einer Client/Server Anwendung beim Client einen Button, wenn ich auf den Klicke soll die Verbindung zum Server geöffnet werden und gleich irgendwas gesendet.

Das Problem ist das zwar die Verbindung hergestellt wird, aber der Text erst beim zweiten Klick auf den Button gesendet wird. Ich dachte villeicht braucht der ein paar Sekunden um die Verbindung herzustellen und habe deshalb testweise ein sleep dazwischen geschaltet, aber leider ging das auch nicht.
Hier mal ein Ausschnitt vom Code:

Delphi-Quellcode:
clientsocket1.Active:=true;
ClientSocket1.Socket.SendText('test');
Vielleicht kann mir ja einer von euch weiterhelfen

Vielen Dank schon mal im voraus

Fran

Net7 19. Nov 2005 17:33

Re: Problem mit Verbindungsaufbau
 
versuche es mal so:

Delphi-Quellcode:
clientsocket1.Active:=true;

if clientsocket1.active = true then
begin
ClientSocket1.Socket.SendText('test');
end;

mfg Net7

Taladan 19. Nov 2005 17:35

Re: Problem mit Verbindungsaufbau
 
Probiers mal so, das hat bei mir den Fehler behoben.

Delphi-Quellcode:
ClientSocket1.Socket.SendText('Test' + #13#10)

fran 19. Nov 2005 19:09

Re: Problem mit Verbindungsaufbau
 
Zitat:

Zitat von Net7
versuche es mal so:

Delphi-Quellcode:
clientsocket1.Active:=true;

if clientsocket1.active = true then
begin
ClientSocket1.Socket.SendText('test');
end;

mfg Net7

Leider löst das nicht mein Problem. Mein Problem war ja nicht eine Fehlermeldung, die man so geschickt abfängt, sondern das er zwar den Verbindungsbefehl ausführt, aber scheinbar erst nachdem er den send-Befehl ausgeführt hat. Das ist zwar komisch, da es im Code andersrum steht, aber anders kann ich mir das nicht erklären. Denn wenn ich das zweite Mal auf den Button klicke ist eine Verbindung da und es wird auch die Nachricht gesendet.

@Taladan: Was sollen denn die Zahlen bewirken? Bei mir tun die nichts. Jedenfalls nichts offensichtliches.

gsh 19. Nov 2005 19:30

Re: Problem mit Verbindungsaufbau
 
Du darfst erst ewtas senden wenn die verbindung wirklich aufebaut ist und mit active auf true setzten wird sie nicht gleich aufgebaut.
Mal so nebenbai sowas mit sleep zu lösen ist sehr unschön.

Zu deinem Problem: Sende die Botschaft erst wenn beim clientsocket des Ereignis Connect auftritt dann müsste alles funkionieren

fran 19. Nov 2005 19:46

Re: Problem mit Verbindungsaufbau
 
Zitat:

Zitat von gsh
Mal so nebenbei sowas mit sleep zu lösen ist sehr unschön.

War zwar nur zum Test, aber trotzdem warum ist das unschön? Gibst da vielleicht eine elegantere Möglichkeit, von der ich noch nichts weiß?

Ich weiß sleep legt das ganze Programm lahm, aber ein paar Millisekunde merkt man doch nicht wirklich.

gsh 19. Nov 2005 23:15

Re: Problem mit Verbindungsaufbau
 
Sag wir mal dein prog braucht 50 mili zum connecten. Also gibst du ihm einen sleep von 100 mili. Dein Prog funkt. Doch irgenwann ist der server oder der client so ausgelasstet des er 150 mili braucht zum connecten, was passiert? Dein Server bekommt die erste Nachricht nicht und alles kann versagen ...

Deswegen ist sleep für mich generell unschön. Wenn du aber denoch mal so ein sleep brauchst was ja vorkommen kann und auch in ordnung sein kann dann rate ich dir zu Hier im Forum suchenDelay

*back to topic*
Hast du des mit dem Ereigniss ausprobiert?

flossinger 1. Dez 2005 10:51

Re: Problem mit Verbindungsaufbau
 
ja den Text solltest du erst senden, wenn die Verbindung steht.
Code:
clientsocket1.open;

repeat
application.processmessages;
until clientsocket.active;

ClientSocket1.Socket.SendText('test');
Das geht, hat aber noch einen Schönheitsfehler. Wenn der Server die Verbindung nicht annehmen kann, bleibst du mit dem client Programm in der Schleife hängen. Darum solltest du in die repeat Schleife noch eine Fehlerabfrage einbauen.

Eine bewährte Variante ist die, dass du in der onerror routine eine globale Variable veränderst, die in der repeat Schleife abgefragt wird. Das sendtext machst du auch noch von der Variablen abhängig.

der Flossinger

gsh 1. Dez 2005 17:06

Re: Problem mit Verbindungsaufbau
 
Des ist auch unschön. Das ist viel besser:

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ClientSocket1.Active := true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Socket.SendText('test');
end;

flossinger 1. Dez 2005 19:39

Re: Problem mit Verbindungsaufbau
 
Ja genau,

ist eigentlich naheliegend.

der Flossinger


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz