Probleme mit dem Versenden von Paketen in einer Pipe
-
Hi,
ich habe einen dynamischen Pipeserver geschrieben, der allerdings noch nicht ganz sauber läuft. Das Problem ist, dass der Client ein Paket schickt, der Server aber das gleiche Paket 5mal ausliest. Ich werde die Erstellung der Pipe etc. drunter setzen.
//Das ist eine Pipeinstanz Pipe->hPipe_Inst = CreateNamedPipe (Pipe_Name, PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED, PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT, MaxInst, BufSize, BufSize, PIPE_TIMEOUT, NULL);
//So öffnet der Client (*hPipe) = CreateFile (Pipe_Name, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
//Hier wird ausgelesen. /* "PeekNamedPipe" gibt die gelesen Bytes, "rBytes", die Menge der Bytes in der Pipe, "tBytes", und der Rest der Bytes einer Message, "lBytes", zurück.*/ tBytes = BufSize; for (int zaehler = 0; (zaehler < 5)&&(tBytes != 0); zaehler++) { SetLastError ((int)ERROR_SUCCESS); Success = PeekNamedPipe (Pipe->hPipe_Inst, /*DLLPack*/NULL, BufSize, &rBytes, &tBytes, &lBytes); int E01 = GetLastError(); //ist immer 0 (ERROR_SUCCESS) DLLPack = new TDLLPacket; if ((tBytes != 0)&&(tBytes >= BufSize)&&(rBytes == BufSize)) { //Das richtige Auslesen Success = ReadFile (Pipe->hPipe_Inst, DLLPack, BufSize, &Bytes, &Pipe->oStruct); int E02 = GetLastError(); //ist immer 87 (ERROR_INVALID_PARAMETER) . . }
Das Kuriose ist, dass tBytes pro Schleifenumlauf immer um BufSize, was einer Paketgröße entspricht, größer wird, obwohl der Client nur im 5Sek Abstand sendet. Ausserdem wird "DLLPack" nicht beschrieben, wenn ich ihn nur in ReadFile drin hab.
Also hat jemand eine Idee?
Maffe