Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Empfangene Daten als String bekommen (WSARecv) (https://www.delphipraxis.net/88915-empfangene-daten-als-string-bekommen-wsarecv.html)

Zacherl 22. Mär 2007 23:06


Empfangene Daten als String bekommen (WSARecv)
 
Hey,

ich habe folgende API gehookt (mal wieder :D):

Delphi-Quellcode:
Function Hook_WSARecv( fSocket: TSocket; flpBuffers: lpWSABuf; fdwBufferCount: DWORD; Var flpNumberOfBytesRecvd: DWORD; Var lpFlags: DWORD; flpOverlapped: lpWSAOverlapped; flpCompletionRoutine: lpWSAOverlapped_Completion_Routine ): Integer; StdCall;
Das funktioniert auch wunderbar. Das Problem ist etwas eigentlich recht Banales .. wie erhalte ich die empfangenen Daten in einem string?
Wenn ich die Funktion richtig verstanden habe wird sie mehrmals aufgerufen, auch wenn nur ein Datenpaket übertragen wurde. Die Anzahl der Aufrufe stehen dann in fdwBufferCount? Das ist jetzt mal so mehr oder weniger geraten ..

Zacherl 23. Mär 2007 13:51

Re: Empfangene Daten als String bekommen (WSARecv)
 
Ich hab das hier im MSDN gefunden:

Zitat:

lpBuffers
[in, out] Pointer to an array of WSABUF structures. Each WSABUF structure contains a pointer to a buffer and the length of the buffer.
dwBufferCount
[in] Number of WSABUF structures in the lpBuffers array.
lpNumberOfBytesRecvd
[out] Pointer to the number of bytes received by this call if the receive operation completes immediately.
Nur ich schaffe es nicht den Buffer auszulesen. Mein erster Ansatz war über lpBuffers^.Buf und lpBuffers^.Len. Aber scheinbar handelt es sich ja um ein array, wenn ich das richtig verstanden habe oder?

Zacherl 23. Mär 2007 23:35

Re: Empfangene Daten als String bekommen (WSARecv)
 
Komischerweise .. oder besser gesagt Gott-sei-Dank funktioniert es wenn ich die Daten des Buffers mittels

Delphi-Quellcode:
var
  ABytes: array of byte;
begin
  CopyData(ABytes, flpBuffers^.buf, flpBuffers^.len);
  {..}
end;
in ein ByteArray kopiere. Über String(ABytes) kann ich mir dann auch meinen String generieren :)


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