![]() |
Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Hallo,
das das Thema ähnlich ist zu diesem hier, wo ich auch die Quelltexte hinterlegt habe: ![]() verlinke ich das mal hier. Da die Regeln hier vorsehen: Für jede Frage ein neuer Thread, will ich mich an diese Konvention halten und einen neuen Thread eröffnen. Habe mein Problem mit der Datenübertragung per Named Pipe so weit gelöst, das ich meine Daten vom Client zum Server übertragen kann, jedoch nicht umgekehrt. Die Antwort vom Server kann mein Client nicht empfangen, obwohl ich das Flag PIPE_ACCESS_DUPLEX gesetzt habe. Was muss ich noch verändern, damit die Übertragung in beiden Richtungen funktioniert? Der aktuelle Quelltext ist unter dem oben genannten Link zu finden. |
Re: Senden an Named Pipe klappt nur zum Server! Warum?
Hallo DualCoreCpu,
So hier sollte es in beiden Richtungen klappen. Hab ich grad getestet, weil ich das für meine Zwecke auch brauche. Hab ich dann beim Stöbern gefunden. Programm A: SERVERSEITE
Delphi-Quellcode:
Programm B:
procedure TForm1.FormCreate(Sender: TObject);
var FSA : SECURITY_ATTRIBUTES; FSD : SECURITY_DESCRIPTOR; pch1: shortstring; begin InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@FSD, True, nil, False); FSA.lpSecurityDescriptor := @FSD; FSA.nLength := sizeof(SECURITY_ATTRIBUTES); FSA.bInheritHandle := True; Pipe:= CreateNamedPipe(PChar('\\.\pipe\<test>'), PIPE_ACCESS_DUPLEX or FILE_FLAG_WRITE_THROUGH, PIPE_TYPE_MESSAGE or PIPE_READMODE_MESSAGE or PIPE_NOWAIT, PIPE_UNLIMITED_INSTANCES, 1024, 1024, 50, @FSA); end; procedure TForm1.Button1Click(Sender: TObject); var buffer: shortstring; dw : dword; b1 : boolean; begin buffer:= 'Test'; WriteFile(Pipe, buffer, sizeof(buffer), dw, nil); end; CLIENTSEITE
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var FSA : SECURITY_ATTRIBUTES; FSD : SECURITY_DESCRIPTOR; begin InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@FSD, True, nil, False); FSA.lpSecurityDescriptor := @FSD; FSA.nLength := sizeof(SECURITY_ATTRIBUTES); FSA.bInheritHandle := True; Pipe:= CreateFile(PChar('\\.\pipe\<test>'), GENERIC_READ or GENERIC_WRITE, 0, @FSA, OPEN_EXISTING, 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); var buffer: shortstring; dw : dword; begin ReadFile(Pipe, buffer, sizeof(buffer), dw, nil); end; |
Re: Senden an Named Pipe klappt nur zum Server! Warum?
Danke, wie verrückt! Jetzt funktioniert es in beiden Richtungen! :hello:
Jetzt kann ich daraus ein steuerbares Pipe-Client/Server Paar bauen. :coder2: Das will ich ohne fremde Hilfe schaffen! Will ja selber auch was lernen dabei! |
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Ich hole den Thread mal wieder nach oben. Ich wollte das gerade mal in Delphi 2010 nachvollziehen. Da funktioniert es nicht. Die Clientseite empfängt nichts. Muss man unter Delphi 2010 noch was beachten ?
|
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
folgender Code funtioniert
Delphi-Quellcode:
ist eine aufgebohrte Version der freien Komponenten hinter diesem Link
procedure InitializeSecurity(var SA: TSecurityAttributes;ACL:PACL=nil);
var sd: PSecurityDescriptor; begin // Allocate memory for the security descriptor sd:=AllocMem(SECURITY_DESCRIPTOR_MIN_LENGTH); // Initialise the new security descriptor InitializeSecurityDescriptor(sd, SECURITY_DESCRIPTOR_REVISION); // Add a NULL descriptor ACL to the security descriptor SetSecurityDescriptorDacl(sd, True, ACL, False); // Set up the security attributes structure with SA do begin nLength:=SizeOf(TSecurityAttributes) ; lpSecurityDescriptor:=sd; bInheritHandle:=True; end; end; ![]() |
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Es tut mir Leid. Damit bekomme ich es aber auch nicht aml Laufen. Die Komponenten verbinden sich noch nicht einmal untereinander. Hast DU da ein kleines Demoprogramm ?
Wie gesagt. Unter Delphi 2010 |
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Liste der Anhänge anzeigen (Anzahl: 1)
Auf Basis der Komponenten?
liegt bei, die Eigenschaft ACLFilename fehlt in den Originalkomponenten, einfach ignorieren drücken.. |
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Es tut mir Leid dass ich mich erst jetzt melden konnte.
Es funktioniert wie erhofft. Danke |
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Ich habe die Komponenten jetzt mal bei mir eingebaut und es funktioniert auch gut.
Allerdings habe ich jetzt einen Memoryleak. Wenn ich Reportmemoryleaks on Shutdown auf true einstelle wird auch bei Deinem Beispielprogramm fogender Fehler angemerkt. --------------------------- Unexpected Memory Leak --------------------------- An unexpected memory leak has occurred. The unexpected small block leaks are: 21 - 28 bytes: TMemoryStream x 1 157 - 172 bytes: TPipeClientThread x 1 The sizes of unexpected leaked medium and large blocks are: 4140 --------------------------- OK --------------------------- Der Fehler scheint wohl in der Komponente zu liegen. Hast Du da schon Erfahrungen gemacht ? |
AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Ja, danke für den Hinweis der Client scheint ein Memoryproblem zu haben, ich habe versucht den Fehler zu debuggen, habe aber bis jetzt noch keinen Erfolg gehabt ... wäre für sachdienliche Hinweise dankbar...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr. |
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 by Thomas Breitkreuz