Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Ipc mittels pipes

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.08.2003, 20:16 Uhr
~Guybrush
Gast


Hi Leute!

Ich versuche gerade unter WinXP eine einfache InterProcessCommunication auf die Beine zu stellen, aber irgendwie klappt's nicht so, wie's soll.

Aaaaalso:

Ich hab zwei kleine Programme (Server und Client), die sind z.Z. noch auf einem Rechner, später soll das aber über's Netzwerk laufen.
Das erstellen und verbinden der Pipe (mittels CreateNamedPipe(), ConnectNamedPipe(), CreateFile(), etc.) klappt soweit.
Nur das senden/empfangen von Daten macht Probleme:
Wenn ReadFile() oder WriteFile() aufrufe, erhalte ich die Fehlermeldung: "Die Anweisung in "sowieso" verweist auf den Speicher in "0xcccccccc". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden."

Wenn ich versuche das ganze mittels TransactNamedPipe() zu vollbringen, bekomme ich im Client den Fehler #230 zurück (ERROR_BAD_PIPE, The pipe state is invalid).

Hat wer von euch ne Idee, wo ich nach dem Fehler suchen könnte?
Oder gibt es vielleicht noch irgendwelche anderen tollen Möglichkeit für die IPC übers Netzwerk?

Gruß von Guybrush
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2003, 23:48 Uhr
ao

(Operator)



Zitat:
~Guybrush postete
Hat wer von euch ne Idee, wo ich nach dem Fehler suchen könnte?


Na im Sourcecode natürlich (Vorsicht, Ironie). Wo genau, kann hier freilich keiner wissen, denn du hast vorsichtshalber keinen Source gepostet.

Aber 0xcccccccc klingt nach Pointer ohne Speicher dahinter. Haste irgendwo char * buffer; gemacht, ohne dir Speicher zu holen?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.08.2003, 02:18 Uhr
~guybrush
Gast


ich stelle hier einfach mal den code der betreffenden funktionen rein
wenn jemand das ganze mal ausprobieren möchte, dann kann ich auch gern das ganze C++-Projekt per Mail verschicken


C++:
void CPTServerDlg::OnTransmit()
{
    m_strStatus = "transmitting data...";
    UpdateData(false);    

    LPDWORD lpBytesWritten;
    BOOL bSuccess = WriteFile(hPipe, &m_nOut, 4, lpBytesWritten, NULL);
    if (bSuccess)
        m_strStatus = "data successfully transmitted";
    else
        m_strStatus = "error";
    UpdateData(false);    
    return;
}

void CPTServerDlg::OnRecieve()
{
    m_strStatus = "recieving data...";
    UpdateData(false);    
    UpdateData(true);

    LPDWORD lpBytesRead;
    BOOL bSuccess = ReadFile(hPipe, &m_nIn, 4, lpBytesRead, NULL);    
    if (bSuccess)
        m_strStatus = "data successfully recieved";
    else
        m_strStatus = "error";
    UpdateData(false);    
    return;
}

void CPTServerDlg::OnExchange()
{
    m_strStatus = "exchanging data...";
    UpdateData(false);    
    UpdateData(true);

    LPDWORD lpBytesRead;
    BOOL bSuccess = TransactNamedPipe(hPipe, &m_nIn, 4, &m_nOut, 4, lpBytesRead, NULL);
    if (bSuccess)
        m_strStatus = "data successfully exchanged";
    else
        m_strStatus = "error";
    UpdateData(false);    
    return;
}


Dieser Post wurde am 08.08.2003 um 07:39 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.08.2003, 02:20 Uhr
~guybrush
Gast


ach shit!

kann einer von den admins [\cpp] durch [ /cpp ] ersetzten?

danke!

Dieser Post wurde am 08.08.2003 um 07:39 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.08.2003, 17:28 Uhr
~RHBaum
Gast


1. ich hab von Pipes ned wirklich viel Ahnung, aber sicher das die richtig erzeugt und eingereichtet hast ?

2.
[quotedie sind z.Z. noch auf einem Rechner, später soll das aber über's Netzwerk laufen.
[/quote]
Warum machst es dann nicht gleich ueber Sockets ??? ... Pipes duerften bei Netzwerk-Kommunikation ned so geeignet sein ...

Ciao,
RHBaum
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.08.2003, 17:48 Uhr
Tommix



Hallo,


C++:
  
LPDWORD lpBytesRead;
BOOL bSuccess = ReadFile(hPipe, &m_nIn, 4, lpBytesRead, NULL);    


lpBytesRead = Zeiger ins Nirgendwo, besser:

C++:
DWORD bytesRead;
BOOL bSuccess = ReadFile(hPipe, &m_nIn, 4, &bytesRead, NULL);    


In OnExChange analog.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.08.2003, 18:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


m_strstatus, updatedata, etz ist mfc
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: