Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TClientSocket führt keine Events aus (https://www.delphipraxis.net/200637-tclientsocket-fuehrt-keine-events-aus.html)

Dyami 10. Mai 2019 09:13

TClientSocket führt keine Events aus
 
Hallo zusammen,

ich habe das Problem, dass wenn ich meinen Text versenden möchte dass er nicht in das Event MyOnWrite rein kommt.
Der Server steht und sagt auch, dass meine Anwendung verbunden ist.

Ich hätte erwartet, dass das MyOnWrite Event ausgelöst wird, sobald RufeGewichtAb durch ist.

Was mache ich falsch?

Delphi-Quellcode:
procedure InitSocket;
begin
  FEingangsSocket                   := TClientSocket.Create(nil);
  FEingangsSocket.Host              := '127.0.0.1';
  FEingangsSocket.Port              := '8080';
  FEingangsSocket.Socket.ASyncStyles := [asRead, asWrite, asOOB, asAccept, asConnect, asClose];
  FEingangsSocket.OnRead            := MyOnRead;
  FEingangsSocket.OnWrite           := MyOnWrite;
  FEingangsSocket.ClientType        := ctBlocking;
  setsockopt(FEingangsSocket.Socket.SocketHandle, IPPROTO_TCP, TCP_NODELAY, PAnsiChar(1), 4);
  FEingangsSocket.Active := True;
  Application.ProcessMessages;
  RufeInGewichtAb;
end;

procedure MyOnRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  FPrüfText := string(FEingangsSocket.Socket.ReceiveText); //Text auslesen
end;

procedure MyOnWrite(Sender: TObject; Socket: TCustomWinSocket);
begin
  FTimer.Enabled := True; //Aktiviere einen Timer
end;

function RufeInGewichtAb(): boolean;
begin
  FEingangsSocket.Socket.SendText(WE                 WUMSCH   V');// Text-Senden
end;
Danke LG

Delbor 10. Mai 2019 10:57

AW: TClientSocket führt keine Events aus
 
Hi Dyami
Zitat:

Zitat von Dyami (Beitrag 1431898)
Hallo zusammen,
Ich hätte erwartet, dass das MyOnWrite Event ausgelöst wird, sobald RufeGewichtAb durch ist.

Was mache ich falsch?

Delphi-Quellcode:
procedure InitSocket;
begin
...
  RufeInGewichtAb;
end;

Wie heisst die prozedur nun wirklich? Oder war der oben fett geschriebene Procedurname ein Flüchtigkeitsfehler (fehlendes 'in' im Namen)?

Ansonsten kannst du mal 2 Haltepunkte setzen: einen vor, den andern auf die Prozedurzuweisung. Wird die Zeile mit dem zweiten Haltepunkt abgearbeitet? Oder die des Aufrufs? (RufeInGewichtAb)?

Gruss
Delbor

TomyN 13. Mai 2019 17:15

AW: TClientSocket führt keine Events aus
 
Hmm,

was willst Du mit dem Timer?
Und Umlaute in Variablennamen würde ich vermeiden (Compiliert das 10.3? Muss ich mal probieren... )

Moombas 14. Mai 2019 14:18

AW: TClientSocket führt keine Events aus
 
Zum einen fehlt die ein ' bei
Delphi-Quellcode:
FEingangsSocket.Socket.SendText(WE WUMSCH V');// Text-Senden
=
Delphi-Quellcode:
FEingangsSocket.Socket.SendText('WE WUMSCH V');// Text-Senden
?


Zum anderen warum ist "RufeInGewichtAb" bei dir eine function, wenn du weder den Boolwert ausliest noch einen zurückgibst?

hoika 14. Mai 2019 15:07

AW: TClientSocket führt keine Events aus
 
Hallo,
habe ich da einen Denkfehler.
Du schickst deinem eigenen Socket einen Text?
Ist das zum Testen?

Dyami 24. Mai 2019 06:50

AW: TClientSocket führt keine Events aus
 
Hallo,

mir geht es theoretisch rein um das Senden einer Anfrage an einen Server.
Ich habe auf der anderen Seite einen Server (TServerSocket).

Wenn ich nun mein Client mit dem Server verbinde also
Delphi-Quellcode:
 FEingangsSocket.Active := True;
dann zeigt mir mein Server auch an, dass ein Client sich verbunden hat.
Nun will ich eine Nachricht an den Server senden, aber diese Nachricht kommt vom Client nie am Server an, deswegen frage ich, was ich falsch mache.

Mein Ziel ist es, dass ich später mit einer STX + Daten + ETX Anfrage, Daten vom Server als Antwort bekomme.
Das mit dem STX und ETX habe ich aktuell noch nicht eingebaut, weil ich es erstmal einfach haben wollte.



Delphi-Quellcode:
procedure InitSocketAndSendRequest;
begin
  FEingangsSocket := TClientSocket.Create(nil);
  FEingangsSocket.Host := '127.0.0.1';
  FEingangsSocket.Port := '8080';
  FEingangsSocket.Socket.ASyncStyles := [asRead, asWrite, asOOB, asAccept, asConnect, asClose];
  FEingangsSocket.OnRead := MyOnRead;
  FEingangsSocket.OnWrite := MyOnWrite;
  FEingangsSocket.ClientType := ctBlocking;
  setsockopt(FEingangsSocket.Socket.SocketHandle, IPPROTO_TCP, TCP_NODELAY, PAnsiChar(1), 4);
  FEingangsSocket.Active := True;
  Application.ProcessMessages;

 FEingangsSocket.Socket.SendText('WE WUMSCH V');// Text-Senden
end;

procedure MyOnRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  FPrüfText := string(FEingangsSocket.Socket.ReceiveText); //Text auslesen
end;

procedure MyOnWrite(Sender: TObject; Socket: TCustomWinSocket);
begin
  ShowMessage('TEST');
end;

Dyami 24. Jul 2019 11:24

AW: TClientSocket führt keine Events aus
 
Hat sich erledigt.

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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