![]() |
Pipes: Eintreffende Nachrichten sind zu kurz
Guten Tag,
Bin neu in diesem Forum und hoffe dass ich in der richtigen Sektion gelandet bin(bin noch etwas orientierungslos). Habe zwar die Sufu benutzt, aber mein Spezieller Fall konnte nicht beantwortet werden. Folgendes: Ich sende 'GETTIME'. Der Server meldet auch fröhlich dass er 7 Bytes empfangen hat...allerdings kann er davon nur 'GETT' darstellen. Ich habe dann rausgefunden dass ich in meinem fall folgendes machen muss: [ClientSeite] AnzahlDerZuSendendenBytes(hier 7) * 2 + 2 = 16 Die Formel muss ich auf alles was ich senden will anwenden. Im obigen beispiel kommt dann auf dem Server auch eine Nachricht mit 16 BYtes an, nach dem auslesen der 16BYtes, kann ich einfach die überschüssigen hinten abschneiden, und habe meine NAchricht. Also irgendwas läuft da doch verdammt schief, wenn ich erst meine Daten mehr als dublizieren muss o.O. Mein System: Win Xp 32Bit Delphi2010 Architect (Bin Azubi und gerade auf der Firma, also nicht wundern ;), Pipes mach ich übrigens gerade aus freien Stücken). Das erste Beispiel(was hieraus nicht mehr zu erkennen ist) stammt aus meinem Delphi Buch, Bin gerade bei den letzten paar Seiten und da war dann halt auch ein Beispiel zun PIpes, schlecht erklärt und das wollte überhauptnicht v.v. BIs mein Prog wengstens soweit liefv wie jetzt hats gedaurt. Hier mein Code(So halbwegs sortiert, sind schon ein paar fruststunden ins land gegangen, und wurde frustriert mehrmals geändert und nicht gesäubert^^") Der Server macht ne BlockedNamedPipe auf, blockt zwar die Serverform, aber ich wollte ausschließen dass es vorher an meiner Threadstruktur gelegen hat. Die jetzige Programmstruktur ist vielleicht nicht ordentlich(das ging beim frust verloren), aber wnen es einmal richtig klappt, hol och dass nach und packs auch in nützlichere klassen. Server und client sindimo beide in ButtonClickevents. [Server]
Code:
[Client]
var
FConnected, FSuccess: LongBool; Buffer, Buffer2: PAnsiChar; FPipe: THandle; LMSG, LMSG2: String; CbBytesRead, CbWritten: Cardinal; const PipeName: PChar = '\\.\pipe\TimePipeMega' + #0; begin GetMem(Buffer, 2048); GetMem(BUffer2, 2048); while true do begin FPipe := CreateNamedPipe(PipeName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE or PIPE_READMODE_MESSAGE or PIPE_WAIT, 1, 2048,2048, 1000, nil); if FPipe <> INVALID_HANDLE_VALUE then begin FConnected := ConnectNamedPipe(FPipe, nil); if FConnected then begin FSuccess := ReadFile(FPipe, Buffer^, 2048, CbBytesRead, nil); SetLength(LMSG, CbBytesRead); Move(Buffer^, LMSG[1], CbBytesRead); if LMSG = 'GETTIME' then begin MessageBOx(0,PChar(LMSG), 'arrived', 0); end; MessageBox(0, PChar(LMSG), 'x.x', 0); MessageBox(0,PChar(IntToStr(CbBytesRead)), 'o.o', 0); FlushFileBuffers(FPipe); DisconnectNamedPipe(FPipe); CloseHandle(FPipe); end; end; Sleep(1000); end; FreeMem(Buffer); FreeMem(Buffer2); end;
Code:
procedure TForm2.Button1Click(Sender: TObject);
var Send: String; RecString: String[255]; Re, BytestoWrite: Cardinal; Pipe: String; PipeHandle: THandle; Buffer, Buffer2: PChar; begin Pipe := '\\192.168.1.221\pipe\TimePipeMega'; Send := 'GETTIMEHOLADIO'; GetMem(Buffer, 2048); GetMem(Buffer2, 2048); BytesToWrite := Length(Send)+16; Move(Send[1], Buffer^, 30); PipeHandle := CreateFile (PChar(Pipe), // pipe name GENERIC_READ or GENERIC_WRITE, // read and write access 0, // Not shared nil, // No security attributes OPEN_EXISTING, // opens existing pipe 0, // default attributes 0 ); // No template WriteFile(PipeHandle,Buffer^, Length(Send)+2, RE, nil); FreeMem(Buffer); FreeMem(Buffer2); end; MFG Memnarch |
AW: Pipes: Eintreffende Nachrichten sind zu kurz
Du hast Delphi2010, seit Delphi 2009 muß Du wegen der Unicodefähigkeit aufpassen.
Nimm in Deinem Fall am einfachsten überall AnsiString wo jetzt :String steht. |
AW: Pipes: Eintreffende Nachrichten sind zu kurz
Wow, vielen Dank^^.
Werde mir lieber nochmal String/AnsiString genauer anschauen damit ich mich damit nicht wieder auf die Nase lege^^ Danke nochmals. MFG Memnarch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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-2025 by Thomas Breitkreuz