AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]
Thema durchsuchen
Ansicht
Themen-Optionen

Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

Ein Thema von DualCoreCpu · begonnen am 7. Feb 2010 · letzter Beitrag vom 18. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2      
DualCoreCpu
(Gast)

n/a Beiträge
 
#1

Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 7. Feb 2010, 00:46
Hallo,

das das Thema ähnlich ist zu diesem hier, wo ich auch die Quelltexte hinterlegt habe:

http://www.delphipraxis.net/internal...127785#1127785

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.
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#2

Re: Senden an Named Pipe klappt nur zum Server! Warum?

  Alt 7. Feb 2010, 17:27
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:
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;
Programm B:

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;
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#3

Re: Senden an Named Pipe klappt nur zum Server! Warum?

  Alt 7. Feb 2010, 18:53
Danke, wie verrückt! Jetzt funktioniert es in beiden Richtungen!

Jetzt kann ich daraus ein steuerbares Pipe-Client/Server Paar bauen.

Das will ich ohne fremde Hilfe schaffen!

Will ja selber auch was lernen dabei!
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 2. Mär 2011, 09:43
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 2. Mär 2011, 11:40
folgender Code funtioniert
Delphi-Quellcode:
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;
ist eine aufgebohrte Version der freien Komponenten hinter diesem Link
http://cc.embarcadero.com/Item/21507
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 2. Mär 2011, 12:01
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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 2. Mär 2011, 12:48
Auf Basis der Komponenten?
liegt bei, die Eigenschaft ACLFilename fehlt in den Originalkomponenten, einfach ignorieren drücken..
Angehängte Dateien
Dateityp: zip NamedPipes_Emba.zip (169,5 KB, 52x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 10. Mär 2011, 07:22
Es tut mir Leid dass ich mich erst jetzt melden konnte.
Es funktioniert wie erhofft. Danke
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 18. Mär 2011, 08:49
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: Senden an Named Pipe klappt nur zum Server! Warum?[erledigt]

  Alt 18. Mär 2011, 11:00
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...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:42 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