Problem mit dem versenden von Daten



  • Hallo

    ich habe ein Problem mit dem versenden der Daten über den Befehl Send. Genauer gesagt ein Verständnisproblem. Es geht um folgendes ich habe mir zum Send Befehl in der MSDN die Erklärung durchgelesen und habe auch verstanden was der Send Befehl von mir erwartet, nur dann habe ich mir ein Beispielcode besorgt und dort wird alles das was in der MSDN steht über den Haufen geschmissen. Jetzt stehe ich ewas ratlos da und hoffe mir kann da jemand weiter helfen. Ich arbeite mit MFC.

    Die MSDN Erklärung:

    CAsyncSocket::Send

    This method sends outgoing data to a connected stream or datagram socket.

    virtual int Send(
    const void* lpBuf,
    int nBufLen,
    int nFlags = 0 );

    Parameters

    lpBuf
    A buffer containing the data to be transmitted.

    nBufLen
    The length of the data in lpBuf in bytes.

    nFlags
    Specifies the way in which the call is made. The semantics of this function are determined by the socket options and the nFlags parameter. The latter is constructed by combining any of the following values with the C++ OR operator:

    MSG_DONTROUTE Specifies that the data should not be subject to routing. A Windows CE Sockets supplier can choose to ignore this flag; see the SO_DONTROUTE option in "Windows CE Sockets Programming Considerations" in the Platform SDK for more information.

    MSG_OOB Send out-of-band data (SOCK_STREAM only).
    Return Value

    Das Codebeispiel:

    [code]m_sConnected.Send("falsch",strlen("falsch")+1);[/code]
    

    Wenn man sich jetzt die Beschreibung und den Code anguckt, dann stimmt das nicht überein der Code ist komplett anders aufgebaut als die Beschreibung es vorgibt, aber funktionieren tut der Code trotzdem aber warum???

    Gruß Silver



  • "falsch" ist ein Stringliteral, hat damit den Typ char*. char* kann in void* umgewandelt werden.

    strlen("falsch") + 1 ist ein int.

    Der dritte Parameter ist optional (Defaultwert 0).

    Wo ist das Problem?



  • hmm 😕

    also das Problem besteht darin das ich das int nFlags = 0 vollkommend übersehen bzw. überlesen habe. 🙄

    Das andere Problem ist wie bekomme ich nun einen string verschickt wenn ich über send nur char* verschicken kann. Ich muss das doch nun umwandeln innen char* ??



  • Silvercreast schrieb:

    Das andere Problem ist wie bekomme ich nun einen string verschickt

    Was für einen "string"? CString? std::string?

    CStrings kannst du einfach so verschicken, die haben einen Konvertierungsoperator. Für std::string gibt's die Methode c_str.

    wenn ich über send nur char* verschicken kann.

    Wie kommst du darauf? Du kannst jede Art von Daten verschicken, daher void*. Aber du musst angeben, wie lang die Daten sind.



  • MFK schrieb schrieb:

    Wie kommst du darauf? Du kannst jede Art von Daten verschicken, daher void*. Aber du musst angeben, wie lang die Daten sind.

    Ehrlich gesagt weiss ich das gerad selber nicht 🙄

    MFK schrieb schrieb:

    CStrings kannst du einfach so verschicken, die haben einen Konvertierungsoperator. Für std::string gibt's die Methode c_str.

    das hatte ich auch schon probiert, da ging es nicht aber mir ist aufgefallen das ich die () vergessen habe. Hätte ich die gemacht, dann hätte ich mit diesen Thread sparen können. Wahrscheinlich desewegen auch mein toller Gedanke das ich nur char übergeben kann.

    Danke für die Hilfe


Anmelden zum Antworten