Winsock2 Unicode Beispiel



  • Hallo
    Kann mir jemand ein Beispiel für Unicode recv/send mit Winsock2 geben?
    Hab schon mit Google gesucht, aber nicht gefunden.



  • Was hat Unicode mit Winsock zu tun? Entweder Du hast Unicode in Deinem Buffer stehen oder irgendeine andere Kodierung - das ist send und recv sowas von egal.



  • Ich weiss, hab ich auch versucht, aber wenn ich versuche mit

    USES_CONVERSION;
    char szBuffer[1029] = {0};
    rc = recv(Irc->Socket, szBuffer, 1028, 0);
    szBuffer[rc] = '\0';
    cout << "1:" << szBuffer << endl << "2: " << W2A((wchar_t*)szBuffer) << endl;
    

    funktioniert es nicht.



  • Julian19 schrieb:

    szBuffer[rc] = '\0';

    Wenn Du mit Unicode UTF16 meinst, brauchst Du hier 2 Nullbytes.

    cout << "1:" << szBuffer << endl << "2: " << W2A((wchar_t*)szBuffer) << endl;

    2 verschiedene Kodierungen auf den gleichen Stream schreiben... Glaube nicht, dass das eine gute Idee ist.

    funktioniert es nicht.

    Das ist keine Fehlerbeschreibung.



  • Da kommen so ganz viele "??????????????????????".



  • char szBuffer[1029];
    
    ... W2A((wchar_t*)szBuffer) ...
    

    Weißt Du überhaupt was Du da machst? Das ist blanker Unfug....

    Was sagt der Debugger zum Buffer-Inhalt? Was hast Du da empfangen?

    Mach es lieber gleich richtig so (ohne Compilerlauf geprüft, nur das Prinzip aus dem Ärmel geschüttelt):

    USES_CONVERSION;
    union
    {
      char szBuffer[1030] = {0};
      wchar_t wszBuffer[516] = {0};
    } Multibuffer;
    
    rc = recv(Irc->Socket, Multibuffer.szBuffer, 1028, 0);
    //Prüfen, ob rc kleiner/gleich 1028 ist!!
    //Für Unicode-Übertragung muß rc einen geradzahligen Wert haben, ansonsten hast Du ein Konvertierungsproblem!
    Multibuffer.szBuffer[rc] = '\0';
    Multibuffer.szBuffer[rc+1] = '\0'; //Doppelte Nullterminierung wegen Unicode!
    cout << "1:" << Multibuffer.szBuffer << endl << "2: " << W2A(Multibuffer.wszBuffer) << endl;
    

    HTH,
    Martin



  • Mmacher schrieb:

    char szBuffer[1029];
    
    ... W2A((wchar_t*)szBuffer) ...
    

    Weißt Du überhaupt was Du da machst? Das ist blanker Unfug....

    Was sagt der Debugger zum Buffer-Inhalt? Was hast Du da empfangen?

    Mach es lieber gleich richtig so (ohne Compilerlauf geprüft, nur das Prinzip aus dem Ärmel geschüttelt):

    USES_CONVERSION;
    union
    {
      char szBuffer[1030] = {0};
      wchar_t wszBuffer[516] = {0};
    } Multibuffer;
    
    rc = recv(Irc->Socket, Multibuffer.szBuffer, 1028, 0);
    //Prüfen, ob rc kleiner/gleich 1028 ist!!
    //Für Unicode-Übertragung muß rc einen geradzahligen Wert haben, ansonsten hast Du ein Konvertierungsproblem!
    Multibuffer.szBuffer[rc] = '\0';
    Multibuffer.szBuffer[rc+1] = '\0'; //Doppelte Nullterminierung wegen Unicode!
    cout << "1:" << Multibuffer.szBuffer << endl << "2: " << W2A(Multibuffer.wszBuffer) << endl;
    

    HTH,
    Martin

    Das funktioniert bei mir nicht 😞



  • WAS funktioniert nicht?

    Das Compilieren?
    Die Funktion recv()?
    Die Ausgabe an cout?
    Dein PC funktioniert nicht?

    Und nochmal die wichtigste Frage:
    Was sagt der Debugger zum Buffer-Inhalt? Was hast Du da empfangen? Wie sieht er Byte für Byte aus?

    Welchen Wert hat rc?

    Und vor allem, ich muß davon ausgehen, daß Du weißt was Unicode ist?
    Martin


Log in to reply