Problem mit WinAPI und Winsock!
-
Hi,
Ich habe ein Problem mit dem Winsock und der WinAPI!
Ich wollte mal ein Programm schreiben, um den Umgang mit den Winsock zu lernen!
Also hab ich einen Server und einen Clienten geschrieben (ich habe die Funktionen send() und recv() verwendet). Nun wenn der Client eine Nachricht empfängt wollte ich das diese mit MessageBoxA() gezeigt wird, aber wenn ich das Versuche kommen nur als Ausgabe in die MessageBox Umlaute und andere Zeichen, aber nicht das richtige. Wenn ich aber nun mit der Funktion OutputDebugString() mein Empfangenen String (char*) ausgeben lasse wird das ausgegeben was auch gesendet wurde.Also liegt das Problem am Zeichensatz und den WinAPI Funktionen.
Kann mir jemand helfen?Danke im Voraus
Mfg
Mi25
-
Code zeigen.
-
Hier nochmal Codeausschnitte
Zum Empfangen auf Clienten Seite:
(Ich habe die Methode dialog gemacht, diese sendet und wartet einfach so lange bis man was empfängt)const char* ClientSocket::dialog(char*csend){ send(csocket,csend,strlen(csend),0); shutdown(csocket,SD_SEND); char buf[256]; ZeroMemory(buf,sizeof(buf)); int result = 1; result = recv(csocket,buf,256,0); const char* rchar = buf; restart();//eigene Methode return rchar; }
In main:
ClientSocket cs("127.0.0.1",2222);//Beispiel Addresse const char* r = cs.dialog("WAIT");//Sendet wait und wartet auf Antwort MessageBoxA(NULL,r,"TEST",MB_ICONERROR);
Bemerkung: Ich programmiere mit Visual Studio C++ 2010 Express
-
Du weisst schon, daß buf nach dem Ende von dialog nicht mehr exisiert und somit auch rchar bzw. der Rückgabewert nur undefiniertes Zeugs enthält.
-
Vielen Dank! Ich schreibe erst seit kurzen mit C++ und in Java gibt es keine Pointer wie in C++ oder char* string. Darum hab ich den Fehler nicht gesehen.
Mfg
Mi25
-
Wenn du buf zu ner Membervariablen von ClientSocket machst kannst du den Inhalt dann auch mit der MessageBox ausgeben.